2012-07-05 5 views
0

안녕하세요,SQL • 배열의 조인 결과

여기 내 문제가 있습니다 : 내 테이블 프로젝트에서 (지금은) 유일한 테스트 프로젝트를 선택하려면 선택 쿼리를 만듭니다. SCREENSHOT과 관련된 스크린 샷을 검색하기 위해 테이블에 조인을합니다. 오직 그는 스크린 샷만큼 많은 결과를 얻을 것입니다! 예를 들어 여기에서 5. 연관 배열이 스크린 샷을 URL에 추가하는 데이터 (이름, 날짜 표시, 설명 등)로 돌아갈 수 있습니까? 아니면 내 삶을 단순화 할 해결책이 있습니까? 내가 볼 수있는 유일한 해결책은 PHP에서 직접 처리하기 때문입니다.

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

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

가 당신을 감사합니다 (죄송합니다, 내 위해서 var_dump가 나는 이유를 이해하지 않습니다 ... 그 온라인 저를 보여줍니다)

다음
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 

가 반환되는 것입니다 : 여기

내 쿼리입니다 도움을 청하십시오. 코디 얼.

+1

MySQL을 사용중인 DBMS는 무엇입니까? SQL 서버? –

+0

SQL에서 행을 하나의 행에 연결하는 것에 대해 여러 번 묻는 질문을하고 있다고 생각합니다. 나는 최근에 여러 가지 DBMS의 솔루션으로 [대답] (http://stackoverflow.com/questions/11292896/sql-matching-query/11294127#11294127)을주었습니다. 그러나, "유일한 해결책은 PHP에서 직접 처리하는 것입니다."*라고 말하면서, 이것이 유일한 해결책은 아니지만 아마도 가장 좋은 해결책 일 것입니다. PHP는 SQL보다 훨씬 나은 배열을 다루므로 배열을 PHP와 데이터 저장소에 데이터베이스로 남겨 두지 않는 이유는 무엇입니까? – GarethD

+1

@GarethD - 참고 : 이러한 모든 대답에는 쉼표가 포함 된 문자열을 집계 할 때와 동일한 문제가 있습니다. * [그러나 그것은 좋은 답변입니다.] * – MatBailie

답변

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으로 정렬됩니다. 이렇게하면 간단한 중첩 루프를 수행 할 수 있습니다.

A는 내가하지 않을 것입니다 무엇


FOR EACH nom IN recordSet1 
    WHILE recordSet1.idProject = recordSet2.idProject 
    Do something with the URL 
    Move to next record in recordSet2 
    LOOP 
LOOP 
... 의사 코드가 될 수 단순화 또 다른 옵션으로 함께 모든 URL을 연결하는 것입니다

단일 문자열. 아마도 쉼표로 구분하여 CSV 필드를 만듭니다.

그러나 URL에 쉼표가 있으면 해당 내용이 중단됩니다. 그래서 아마도 XML이나 다른 것을 사용하기를 원할 것입니다. 생성 및 구문 분석 비용이 추가되었습니다.

반복되는 필드의 네트워크 오버 헤드가 인데 실제로는이라는 문제가 발생하지 않는 한, 나는 그것에 충실 할 것입니다. 그리고 그것이 문제를 일으키는 경우, 2- 레코드 - 세트 대안은보다 견고하고 비교적 간단합니다.

+0

+1 단순히 "내가하지 않을 일". SQL 내에서 문자열 연결을위한 시간과 장소가 있으며, 나는 이것이 그 중 하나라고 생각하지 않는다. 이것들은 내가 표현하고 싶었지만 답이 아니라 의견으로 귀찮게 될 수 있습니다 ... – GarethD