2012-07-05 63 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