Selection de données non présentes dans une seconde table

Eléphant du PHP | 68 Messages

05 mai 2006, 08:07

Bonjour, voilà mon problème,
j'ai deux tables:
table1
id | nom
1 | alpha
2 | beta
3 | gamma
...

table 2
id | login
1 | ceci
1 | cela
2 | ceci

Je voudrais récupérer les id de la première table qui ne sont pas dans la seconde pour un login particulier

Par exemple, pour le login ceci, la requête devra renvoyer 3
poru le login cela, la requête devra renvoyer 2 et 3

Merci de votre aide

PS: il doit y avoir de la jointure de table mais je ne sais pas comment formuler cette "non-présence"

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

05 mai 2006, 09:16

Si tu disposes d'une version de MySQL > 4.1, tu peut utiliser les sous-requetes et l'operateur SQL NOT IN

Code : Tout sélectionner

SELECT t1.id, t1.nom FROM table1 t1 WHERE t1.id NOT IN ( SELECT t2.id FROM table2 t2 WHERE login LIKE 'ton_login')
Sinon, il faut que tu réalises 2 requetes : 1 pour obtenir la liste des identifiants dans la table2, que tu concatène ses identifiants en une chaine et que tu remplace la sous-requete dans mon exemple par cette liste d'identifiant
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Administrateur PHPfrance
Administrateur PHPfrance | 977 Messages

05 mai 2006, 09:18

Code : Tout sélectionner

SELECT table1.id FROM table1 LEFT JOIN table2 ON table1.id = table2.id WHERE table2.Id IS NULL AND login='ceci'
Voila j'ai pas vérifié mais c'est quelques choses comme ca
pro : http://www.ohweb.fr -> studio de développement en PHP, expertise en e-commerce, certifié PrestaShop
perso : http://www.olecorre.com -> un dico de termes informatiques

J'ai toujours rêvé d'un ordinateur qui soit aussi facile à utiliser qu'un téléphone. Mon rêve s'est réalisé : je ne sais plus comment utiliser mon téléphone. [Bjarne Stroustrup]

Eléphant du PHP | 68 Messages

06 mai 2006, 07:55

Merci beaucoup....je vais voir si je peux adapter cela à mon cas! Merci

Eléphant du PHP | 68 Messages

07 mai 2006, 21:02

Code : Tout sélectionner

SELECT table1.id FROM table1 LEFT JOIN table2 ON table1.id = table2.id WHERE table2.Id IS NULL AND login='ceci'
Voila j'ai pas vérifié mais c'est quelques choses comme ca
Voilà, après quelques tests, cela ne semble pas fonctionner!

Si j'enlève le AND login='ceci', j'ai bien les éléments dont l'id n'est pas dans la table2 mais il semblerait que la condition sur le login fausse la sélection...

Une petite piste? J'ai essayé les parenthèses sans succès!

Merci beaucoup

Eléphant du PHP | 68 Messages

08 mai 2006, 07:10

Code : Tout sélectionner

SELECT table1.id FROM table1 LEFT JOIN table2 ON table1.id = table2.id WHERE (table2.Id IS NULL AND login IS NULL) OR (table2.id=table1.id and ligin<>'ceci') OR (table2.id=table1.id AND login IS NULL)
Voilà, en rajoutant ces petites conditions, cela fonctionne!

Merci à tout ceux qui m'ont aidé sur ce problème