2013-02-22 3 views
0

Je veux choisir parmi 2 tables différentes.Comment choisir parmi deux tables et n'afficher que ce que vous voulez?

Dans le premier tableau, je veux tout sélectionner, mais je n'afficherai que ce que je veux.

Dans la deuxième table, je veux sélectionner uniquement l'image de profil, mais même si un utilisateur n'a pas d'image de profil, ses données de la table utilisateur doivent être sélectionnées. J'utilise des jointures internes. Voici mon code:

SELECT * FROM 
tish_user INNER JOIN tish_images 
ON tish_user.user_id = tish_images.user_id 
WHERE tish_images.prof_image = 1 
+0

Si les répondants suggèrent d'utiliser un OUTER JOIN, l'ajout d'une condition WHERE à la table jointe est autodestructeur. – Strawberry

+0

Il me manque quelque chose @Strawberry. –

+0

Avez-vous essayé ma solution downvoted? –

Répondre

1

Essayez cette façon

SELECT * FROM 
tish_user, tish_images 
WHERE tish_user.user_id = tish_images.user_id 
AND 
tish_images.prof_image = 1; 

Je pense que cela pourrait vous aider.

Vive bro

+0

ok merci l'homme mais j'ai utilisé nic's – humphrey

1

Utilisation LEFT JOIN au lieu de INNER JOIN.

SELECT * FROM 
tish_user LEFT JOIN tish_images 
ON tish_user.user_id = tish_images.user_id 
WHERE tish_images.prof_image = 1 

Explication

LEFT JOIN sélectionne toutes les lignes dans la table de gauche, même s'il n'y a aucune entrée dans la table droite (dans ce cas, les colonnes de la table de droite seront NULL)

Jetez également un RIGHT JOIN, il fait la même chose avec le côté droit :)

+2

^pour expliquer pourquoi: LEFT JOIN conserve toutes les informations sur le côté gauche de la 'LEFT JOIN' (dans votre cas tish_user), même si certaines lignes de ce tableau n'ont pas un commun index avec la table du côté droit, il sera toujours affiché, avec des valeurs NULL sur les champs correspondant à la table de droite. – Naryl

+0

Oui, merci, j'ai essayé d'expliquer la même chose, mais probablement pas assez bien :) –

1

Essayez ceci:

SELECT * 
FROM 
tish_user U 
    LEFT JOIN tish_images I 
ON U.user_id = I.user_id 
    AND = I.prof_image = 1 
2

Pour sélectionner parmi deux tables différentes, vous devez spécifier les valeurs de chaque table que vous souhaitez, sans utiliser de fourre-tout *. L'utilisation d'un LEFT JOIN au lieu d'un INNER JOIN vous permet de connecter les tables que vous interrogez sur un seul point. Vous pouvez interroger n'importe quel type de relation entre les tables à ce moment-là.

Cette requête vous donnera toutes les userid s en tish_user retournant le tish_images.prof_image enregistrement correspondant si prof_image est 1, NULL sinon.

SELECT 
    tish_user.user_id, 
    tish_images.prof_image 
FROM 
    tish_user 
LEFT JOIN tish_images 
ON tish_user.user_id = tish_images.user_id 
AND tish_images.prof_image = 1 
+1

Est-ce une explication sur le chemin? –

+1

(Faites-moi confiance, je n'ai pas downvoted ceci. :)) Mais, vous devez fournir une description, ce qui se passe ici .. ou un lien qui permettra de dissiper les doutes sur le concept, le cas échéant, dans l'esprit du questionneur. –

+0

Ceci est faux: SELECT x. * FROM x LEFT JOIN y ON y.a = x.a O y y.b = 'z'; – Strawberry

1

Essayez ceci:

Supposons que vous voulez afficher l'ID utilisateur, et prenom de la table lastname de tish_user et la prof_image de la table tish_images.

SELECT tish_user.userd_id, tish_user.firstname, tish_user.lastname, tish_images.prof_image 
FROM tish_user tish_user LEFT JOIN tish_image tish_image ON tish_user.user_id=tish_images.user_id WHERE tish_image.prof_image=1 

Je pense que cela fera l'affaire.

+1

Votre contribution sur l'événement est appréciée – humphrey

Questions connexes