0

Good evening,

Here is my problem: I make a select query on my table PROJECT to select (for now) my only test project. I do a join on the table to retrieve screenshots SCREENSHOT associated with it. Only he will get out as many results as there are screenshots! Ie here 5. Could I go back to more data (name, datesortie, description, etc.) an associative array urls screenshots? Or would you have a solution to simplify my life? Because the only solution I see is treating it directly in php.

Here is my query:

SELECT P.nom, datesortie, description, lien, icone, tag, S.url
FROM PROJET P

LEFT JOIN CLIENT C
ON C.idclient = P.idclient

LEFT JOIN SCREENSHOT S
ON S.idprojet = P.idprojet

ORDER BY P.nom

Here is what is returned (Sorry, my var_dump shows me that online ... I do not understand why):

array(7) { ["nom"]=> string(10) "BlackStars" ["datesortie"]=> string(10) "2012-07-02" ["description"]=> string(498) "Inspiré par Little Stars for Little Wars, Black Stars se veut être meilleur par bien des aspects. Prenez le contrôle d'une planète et partez à la conquête de l'univers en remportant chacune des batailles, en brisant chacune des planètes ennemies, en devenant le meilleur joueur. Car une fois le mode solo terminé, un mode multi-joueurs (Bluetooth ou Game Center) vous attend afin de vous mesurer au monde entier. Hissez-vous en haut du classement et devenez le maître incontesté de Black Stars. " ["lien"]=> string(69) "http://itunes.apple.com/us/app/black-stars/id512945753?l=fr&ls=1&mt=8" ["icone"]=> string(131) "http://a1775.phobos.apple.com/us/r30/Purple/v4/73/47/b7/7347b764-cff9-c52b-78da-42560a187acf/mza_1097997557772736292.170x170-75.png" ["tag"]=> string(10) "blackstars" ["url"]=> string(119) "http://a1352.phobos.apple.com/us/r30/Purple/v4/51/df/f5/51dff56b-08c6-59db-81df-80a174ec0050/mza_509496145749890361.png" }

===================================================
===================================================

array(7) { ["nom"]=> string(10) "BlackStars" ["datesortie"]=> string(10) "2012-07-02" ["description"]=> string(498) "Inspiré par Little Stars for Little Wars, Black Stars se veut être meilleur par bien des aspects. Prenez le contrôle d'une planète et partez à la conquête de l'univers en remportant chacune des batailles, en brisant chacune des planètes ennemies, en devenant le meilleur joueur. Car une fois le mode solo terminé, un mode multi-joueurs (Bluetooth ou Game Center) vous attend afin de vous mesurer au monde entier. Hissez-vous en haut du classement et devenez le maître incontesté de Black Stars. " ["lien"]=> string(69) "http://itunes.apple.com/us/app/black-stars/id512945753?l=fr&ls=1&mt=8" ["icone"]=> string(131) "http://a1775.phobos.apple.com/us/r30/Purple/v4/73/47/b7/7347b764-cff9-c52b-78da-42560a187acf/mza_1097997557772736292.170x170-75.png" ["tag"]=> string(10) "blackstars" ["url"]=> string(119) "http://a572.phobos.apple.com/us/r30/Purple/v4/db/1d/1d/db1d1d00-3a28-8b6f-d52f-342bf5893912/mza_3642427234916705950.png" }

===================================================
===================================================

array(7) { ["nom"]=> string(10) "BlackStars" ["datesortie"]=> string(10) "2012-07-02" ["description"]=> string(498) "Inspiré par Little Stars for Little Wars, Black Stars se veut être meilleur par bien des aspects. Prenez le contrôle d'une planète et partez à la conquête de l'univers en remportant chacune des batailles, en brisant chacune des planètes ennemies, en devenant le meilleur joueur. Car une fois le mode solo terminé, un mode multi-joueurs (Bluetooth ou Game Center) vous attend afin de vous mesurer au monde entier. Hissez-vous en haut du classement et devenez le maître incontesté de Black Stars. " ["lien"]=> string(69) "http://itunes.apple.com/us/app/black-stars/id512945753?l=fr&ls=1&mt=8" ["icone"]=> string(131) "http://a1775.phobos.apple.com/us/r30/Purple/v4/73/47/b7/7347b764-cff9-c52b-78da-42560a187acf/mza_1097997557772736292.170x170-75.png" ["tag"]=> string(10) "blackstars" ["url"]=> string(120) "http://a1701.phobos.apple.com/us/r30/Purple/v4/60/5f/ae/605fae3e-f00b-c3b7-0f65-ca73f6fd9864/mza_4565911160744621776.png" }

===================================================
===================================================

array(7) { ["nom"]=> string(10) "BlackStars" ["datesortie"]=> string(10) "2012-07-02" ["description"]=> string(498) "Inspiré par Little Stars for Little Wars, Black Stars se veut être meilleur par bien des aspects. Prenez le contrôle d'une planète et partez à la conquête de l'univers en remportant chacune des batailles, en brisant chacune des planètes ennemies, en devenant le meilleur joueur. Car une fois le mode solo terminé, un mode multi-joueurs (Bluetooth ou Game Center) vous attend afin de vous mesurer au monde entier. Hissez-vous en haut du classement et devenez le maître incontesté de Black Stars. " ["lien"]=> string(69) "http://itunes.apple.com/us/app/black-stars/id512945753?l=fr&ls=1&mt=8" ["icone"]=> string(131) "http://a1775.phobos.apple.com/us/r30/Purple/v4/73/47/b7/7347b764-cff9-c52b-78da-42560a187acf/mza_1097997557772736292.170x170-75.png" ["tag"]=> string(10) "blackstars" ["url"]=> string(119) "http://a193.phobos.apple.com/us/r30/Purple/v4/7c/ff/67/7cff67dc-d679-16ee-24cf-7f658c78b9c8/mza_8709328453215958742.png" }

===================================================
===================================================

array(7) { ["nom"]=> string(10) "BlackStars" ["datesortie"]=> string(10) "2012-07-02" ["description"]=> string(498) "Inspiré par Little Stars for Little Wars, Black Stars se veut être meilleur par bien des aspects. Prenez le contrôle d'une planète et partez à la conquête de l'univers en remportant chacune des batailles, en brisant chacune des planètes ennemies, en devenant le meilleur joueur. Car une fois le mode solo terminé, un mode multi-joueurs (Bluetooth ou Game Center) vous attend afin de vous mesurer au monde entier. Hissez-vous en haut du classement et devenez le maître incontesté de Black Stars. " ["lien"]=> string(69) "http://itunes.apple.com/us/app/black-stars/id512945753?l=fr&ls=1&mt=8" ["icone"]=> string(131) "http://a1775.phobos.apple.com/us/r30/Purple/v4/73/47/b7/7347b764-cff9-c52b-78da-42560a187acf/mza_1097997557772736292.170x170-75.png" ["tag"]=> string(10) "blackstars" ["url"]=> string(120) "http://a1443.phobos.apple.com/us/r30/Purple/v4/d7/13/8f/d7138f62-6398-7993-8d0b-23e0ce16dca2/mza_8316005873463209973.png" }

===================================================
===================================================

Thank you in advance for your help. Cordially.

4

1 に答える 1

2

私が集めた情報によると、最初の 6 つのフィールドに繰り返し情報が必要なわけではありませんか?

通常、繰り返される情報を受け入れることが、その方法です。ただし、 2 つのレコード セットを引き戻すことができます。それらがきちんと順序付けられていれば、ネストされたループを実行してそれらを処理できます。

SELECT P.nom, datesortie, description, lien, icone, tag, idproject
FROM PROJET P
LEFT JOIN CLIENT C
ON C.idclient = P.idclient
LEFT JOIN SCREENSHOT S
ON S.idprojet = P.idprojet
ORDER BY P.nom

SELECT P.idproject S.url
FROM PROJET P
INNER JOIN SCREENSHOT S
ON S.idprojet = P.idprojet
ORDER BY P.nom

注: 最初のクエリにもidprojectフィールドが含まれるようになりました。これは、2 番目のレコード セットにも存在します。2 番目のレコード セットもP.nom、ステートメントで選択されていませんが、順になっています。これにより、単純なネストされたループを実行できるようになります。

簡素化された疑似コードは次のようになります...

FOR EACH nom IN recordSet1
  WHILE recordSet1.idProject = recordSet2.idProject
    Do something with the URL
    Move to next record in recordSet2
  LOOP
LOOP


私がしないこと

もう 1 つのオプションは、すべての URL を 1 つの文字列に連結することです。CSV フィールドを作成するためにコンマで区切られている場合があります。

しかし、URL にコンマが存在すると、それが壊れます。したがって、おそらく XML などを使用したいと思うでしょう。生成と解析のコストが追加されます。

繰り返されるフィールドのネットワーク オーバーヘッドが実際に問題を引き起こしている場合を除き、私はそれに固執します。また、それが問題を引き起こしている場合は、2 レコード セットの代替手段がより堅牢で比較的単純です。

于 2012-07-05T22:33:00.290 に答える