2011-10-19 3 views
0

J'ai 2 tables (mysql), une pour le nom du produit et l'autre pour les images de produits.requête SQL pour joindre deux tables

tblProducts -> id (int, pk), nom (varchar)

tblphotos ---> id (int, pk), ProductID (int, fk), photo, ordre

dans tblphotos le champ de commande est l'ordre d'affichage des photos (1,2,3 ...)

Il peut y avoir plus de 1 photo pour chaque produit. J'ai besoin la première photo du produit (ordre = 1)

J'ai besoin est tblproducts.id, tblproducts.name, tblphotos.photo (photo doit être celui avec ordre 1)

j'ai écrit la requête suivante , mais je suis le nom du produit répète

SELECT tblproducts.id,tblproducts.name, tblphotos.photo 
    FROM tblproducts 
LEFT JOIN tblphotos on tblphotos.productid = tblproducts.id 

une chose :: je dois trier l'ordre dans l'ordre croissant

+1

Vous avez oublié en utilisant la clause where? c'est à dire; où 'tblphotos.order = 1' – Prasanth

Répondre

-1

Je pense que cela va fonctionner pour vous

SELECT tblproducts.id, tblproducts.name, tblphotos.photo 
FROM tblproducts 
LEFT JOIN tblphotos on tblphotos.productid = tblproducts.id 
    and tblphotos.order=1; 
+1

Je crois que 'and' doit être chnage avec' where'. 'and' ne s'appliquera que sur les' tblphotos'. Cela signifie que ** toutes ** les lignes de 'tblproducts' seront toujours là et si elles perdent une correspondance dans' tblphotos' à cause de 'end', elles seront remplacées par des valeurs nulles. – Melsi

+0

@Melsi: Oui, je pense que vous avez raison toutes les données de tblproducts seront en résultat ... nous pouvons également remplacer LEFT JOIN par JOIN alors il devrait être correct. –

3

Si vous souhaitez que la première photo (celui avec commande = 1), alors vous devez spécifier que dans votre requête:

SELECT 
    PR.id AS product_id, 
    PR.name, 
    PH.photo 
FROM 
    Products PR 
LEFT OUTER JOIN Photos PH ON 
    PH.product_id = PR.id AND 
    PH.`order` = 1 

Depuis order est probablement un mot réservé, j'ai inclus dans la identifiant cité par défaut pour MySQL. Vous feriez mieux d'utiliser un autre nom de colonne. Aussi, je ne peux pas me résoudre à écrire une requête avec "tbl" devant les noms des tables.

+0

@JohnK, être d'accord avec TomH que vous devriez rester loin des mots réservés dans vos noms de colonnes - cela ne vous causera que des problèmes sur toute la ligne et aussi pas nécessaire de préfixer les noms de tables avec tbl. Toujours sur un point de normalisation, les noms de table devraient habituellement être singulier, c'est-à-dire produit et photo plutôt que pluriel, mais c'est un point mineur. –

+0

+1. @JohnK: 'SortOrder' est une bonne alternative à' Order'. Un autre est 'Sort'. –

0

essayez ceci:

SELECT tblproducts.id,tblproducts.name, tblphotos.photo 
FROM tblproducts LEFT JOIN tblphotos on tblphotos.productid = tblproducts.id 
and tblphotos.order=1