2014-09-13 6 views
0

PHP + MYSQLLa meilleure façon de sélectionner 2 tables MySQL

J'ai 2 tables:

  • colonnes "post": [id, commentaire]
  • "images" colonnes: [id, poste , image]

J'ai besoin de montrer dans ma page html les messages, avec les images dans chaque poste. Exemple:


Mon premier commentaire de poste (ce poste a une image)

  • Image 1

Mon deuxième commentaire de poste (ce poste a trois images)

  • image 1
  • image 2
  • Image 3

Ma troisième poste (ce poste comporte deux images)

  • image 1
  • Image 2

..

Une façon de le faire est: pour chaque poste, aller à la base de données et obtenir les images ... mais je pense que moins d'accès à la base de données est mieux ... comment puis-je faire ma sélection?

(J'aimerais une ligne par POSTE ...) est-ce possible?

exemple Résultat:

COLONNE POST - COLONNE IMAGE

"Mon premier post" - "image1.jpg, image2.jpg, image3.jpg"

Y at-il une autre meilleure façon de le faire il?

Merci!

+0

est la colonne post sur les images l'id référencé de la table de la poste? – Prix

+3

sonne comme si vous avez juste besoin d'un JOIN dans votre querry –

+0

oui @Prix ... est une clé étrangère ... – guinatal

Répondre

1

Il suffit d'utiliser GROUP_CONCAT pour concaténer plusieurs images liées à un poste, comme dans l'exemple suivant:

SELECT POST.ID AS POST_ID, GROUP_CONCAT(IMAGES.IMAGE) AS IMAGES 
FROM POST 
JOIN IMAGES ON IMAGES.POST = POST.ID 
GROUP BY POST.ID 
ORDER BY POST.ID 
+0

Merci! Ce que vous pensez est meilleur et plus rapide? Un simple JOIN et je gère les lignes multiples en PHP ou GROUP_CONCAT? Merci! – guinatal

+0

Vous pouvez aller avec GROUP_CONCAT sans pénalité de performance. – aleroot

+0

Nous pourrions ajouter une note indiquant que la longueur maximale de la chaîne retournée par 'GROUP_CONCAT' est limitée par les variables' group_concat_max_len' et 'max_allowed_packet'. Nous pourrions aussi noter que 'GROUP_CONCAT' est spécifique à MySQL. Par exemple, Oracle 11gR2 offre des fonctionnalités similaires avec la fonction LISTAGG – spencer7593

1

Rejoignez les deux tables et vous avez ce que vous voulez. Il vous suffit de commande par identifiant de poste et c'est tout

SELECT POST.ID AS POST_ID, P.COMMENT, IMAGES.IMAGE 
FROM POST 
JOIN IMAGES ON IMAGES.POST = POST.ID 
ORDER BY POST.ID 
+0

De cette façon , si j'ai 3 images, j'ai 3 lignes ... Je voudrais 1 ligne par poste ... est-ce possible? – guinatal

+0

avec un sql sélectionnez vous pouvez avoir un résultat sous la forme d'une table. Si vous me donnez un exemple, de la façon dont le résultat devrait ressembler, je peux vous dire si c'est possible. – agim

+0

Vous devriez être en mesure de gérer les trois lignes en PHP, c'est pourquoi vous devriez commander le résultat par Post-ID – agim

Questions connexes