2012-07-05 67 views
0

晚上好,SQL•加入數組的結果

這是我的問題:我在我的表PROJECT上選擇查詢以選擇(現在)我唯一的測試項目。我在表上加入一個連接以檢索與其關聯的屏幕截圖SCREENSHOT。只有他會得到儘可能多的結果,因爲有截圖!即在這裏5. 我可以回到更多的數據(名稱,約會,描述等)關聯數組網址截圖? 或者你有解決方案來簡化我的生活?因爲我看到的唯一解決方案是直接在php中處理它。

這裏是我的查詢:

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 

這裏是返回什麼(對不起,我的var_dump表明我在網上...我不明白爲什麼):

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" } 

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

感謝您在提前尋求你的幫助。 親切。

+1

你在用什麼DBMS,MySQL? SQL-服務器? – 2012-07-05 22:26:06

+0

我想你問的問題已經被問了很多次,關於將行連接到sql中的單個行。我最近在許多不同的DBMS中給出了[答案](http://stackoverflow.com/questions/11292896/sql-matching-query/11294127#11294127)。然而,你聲明*「我看到的唯一解決方案是直接在php中處理它」。*,雖然這不是唯一的解決方案,但它可能是最好的解決方案。 PHP處理數組要比SQL好得多,爲什麼不把數組存儲到PHP和數據存儲到數據庫呢? – GarethD 2012-07-05 22:46:35

+1

@GarethD - 注意:所有這些答案在聚合包含逗號的字符串時仍然存在相同的問題。 * [但它是一個很好的答案。] * – MatBailie 2012-07-05 22:48:19

回答

2

從我收集的內容來看,你只是不想在前6個字段中重複所有信息?

通常情況下,接受重複信息是解決問題的方法。但是,您可以將兩個記錄集拉回。假設它們整齊排列,你可以做一個嵌套循環來處理它們。

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領域,也存在於第二個記錄集。第二套記錄也是按照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 


我不會做什麼

另一種選擇是連接所有網址連成一個字符串。也許用逗號分隔以創建一個CSV字段。

但是,然後URL中的逗號的存在將打破。所以你可能想使用XML或其他東西;增加成本來生成和解析。

除非重複字段的網絡開銷是實際上導致問題,我會堅持。如果它造成了問題,那麼兩個記錄集的備選方案會更加健壯並且相對簡單。

+0

+1只爲「我不會做」。在SQL中有一段時間和一個字符串連接的地方,我不認爲這是其中之一。這些是我想表達的情緒,但只能被評論而不是答案所困擾...... – GarethD 2012-07-05 22:51:12