2012-11-29 4 views
2

Quelqu'un peut-il m'aider avec cela?
J'interroge à partir de 2 tables, country_table et language_table liées par country_id.php mysql joindre des tables avec concat

country_table:

country_id continent  country 
100   asia   china 
101   asia   japan 
102   europe   UK 
103   europe   germany 

language_table:

country_id language_id  language 
100    01   mandarin 
100    02   cantonese 
102    03   english 
102    04   french 
102    05   welsh   

Ce que je veux atteindre est d'afficher tous les pays avec ou sans la langue. S'il a un langage, il doit être concaténé comme l'exemple ci-dessous.

continent country language 
asia   china  mandarin, cantonese 
asia   japan  ---- 
europe  UK   english, french, welsh 
europe  germany ---- 
+0

Quels ont essayé, l'espadon jeune? – Madbreaks

+0

ce que j'ai fait était j'ai inséré une autre requête (pour la langue) à l'intérieur de la requête de boucle while pour la liste des pays, je sais que c'est une mauvaise idée, je cherche de l'aide afin de corriger. – swordfish

+0

Ajouter plus d'informations et du code! –

Répondre

3

Vous pouvez utiliser la fonction GROUP_CONCAT() pour effectuer les opérations suivantes:

select c.continent, 
    c.country, 
    group_concat(case 
       when l.language is null 
       then '----' else l.language end order by l.language) language 
from country_table c 
left join language_table l 
    on c.country_id = l.country_id 
group by c.continent, c.country 

Voir SQL Fiddle with Demo

+0

Beau travail avec la déclaration de cas, vous m'avez là. – bikedorkseattle

+0

salut, bluefeet, votre réponse fonctionne, juste une question de suivi, quel serait le sélecteur pour la langue? exemple, $ row ['']? – swordfish

+0

Je ne suis pas familier avec cette syntaxe. Vous voudrez peut-être poster une autre question pour obtenir de l'aide. – Taryn

0

Vous devez faire quelque chose comme ceci.

SELECT ct.continent, ct.country, GROUP_CONCAT(lt.language) 
FROM country_table ct 
LEFT JOIN language_tabel lt USING(country_id) 
GROUP BY ct.country