requête mysql pour sélectionner tout sauf
j'ai deux tables mysql.
la première est appelée "choisi" et se compose d'identité, user_id, et widget_id champs.
l'autre est appelé "widgets" et comprend plusieurs choses, y compris widget_id.
j'ai créé un filtre de sorte que l'utilisateur peut afficher les widgets qu'il/elle a choisi, ou des widgets qu'il/elle n'a pas choisi. pour ceux qu'il a choisis, j'utilise ceci:
SELECT *
FROM widgets, chosen
WHERE chosen.user_id = $user_id
AND chosen.widget_id = widgets.widget_id
cependant, je ne peux pas comprendre comment afficher ceux qu'il/elle n'a pas choisi. cela ne fonctionne pas (affiche tout):
SELECT *
FROM widgets, chosen
WHERE !( chosen.user_id = $user_id
AND chosen.widget_id = widgets.widget_id)
comment puis-je faire cela?
OriginalL'auteur vee | 2010-12-10
Vous devez vous connecter pour publier un commentaire.
Aide PAS:
En utilisant n'EXISTE PAS:
LEFT JOIN/EST NULLE:
Performance:
Si le les colonnes comparé (widget_id dans le tableau) ne sont pas les valeurs null, LEFT JOIN/NULL réalise le meilleur sur MySQL. Si le les colonnes sont nullable (la valeur peut être NULLE), PAS ou n'EXISTE PAS mieux performer.
OriginalL'auteur OMG Ponies
La logique booléenne:
(ab)'
est le même quea' + b'
OriginalL'auteur Derek H
Fondamentalement, vous voulez sélectionner toutes les lignes de
widgets
qui n'ont pas de ligne correspondante dans lachosen
pour le$user_id
. Vous pouvez accomplir cela avec unLEFT OUTER JOIN
à la recherche pour les lignes qui ne correspondent pas à lachosen
table. Quelque chose comme ceci:BTW: je vous recommande d'utiliser la nouvelle syntaxe de jointure sur la délimité par des virgules, les tables de la syntaxe de jointure. Il est plus facile à lire et à comprendre, surtout quand il s'agit de jointures externes.
OriginalL'auteur Asaph