Une requete sur 2 tables

David_monchy Messages postés 214 Date d'inscription lundi 20 mars 2006 Statut Membre Dernière intervention 23 juin 2006 - 16 juin 2006 à 11:03
cs_PoFMaN Messages postés 58 Date d'inscription dimanche 12 décembre 2004 Statut Membre Dernière intervention 21 juin 2006 - 21 juin 2006 à 10:17
bonjour,
je voudrais faire cet algo:
on récupère les user enregistrés mais pas ceux bannis.
j'ai une table utilisateurs, et une table pour les bannis. Tous les utilisateurs sont dans la table utilisateur, et les bannis sont dans la table des bannis. Cela signifie donc que les bannis sont inscrits deux fois dans les tables (dans la table utilisateur et la table bannis). Je voudrais récupérer les utilisateurs non bannis. j'ai fait cela:
SELECT id_user,pseudo FROM chat_user WHERE pseudo != ALL ( SELECT pseudo FROM chat_bannis ) ORDER BY pseudo
mais cela me retourne une erreur entre le != et le ALL. Y aurait-il des pros en SQL pour m'aider?
Merci d'avance.
David

11 réponses

cs_PoFMaN Messages postés 58 Date d'inscription dimanche 12 décembre 2004 Statut Membre Dernière intervention 21 juin 2006
16 juin 2006 à 11:19
Salut,

Tu peut faire une requete comme ca:

select cuser.id_user, cuser.pseudo from chat_user cuser, chat_bannis cban where cuser.pseudo!=cban.pseudo order by cuser.pseudo

Les cuser et cban c'est des "alias" des noms des tables c'est pour pas avoir à réecrire tout le nom de la table

Par contre du devrai mettre les identifiant des utilisateurs dans ta table des bannis au lieu du pseudo, ou alors si chaque pseudo est unique vaut mieu mettre le pseudo en identifiant (ca fait une colonne de moin et ca t'évite des tests et les possibles erreurs qui vont avec)
0
cs_prolix Messages postés 5 Date d'inscription vendredi 9 juin 2006 Statut Membre Dernière intervention 16 juin 2006
16 juin 2006 à 11:25
salut,

et avec not in   ?    (au passage != serait plutot <>)

SELECT id_user,pseudo FROM chat_user WHERE pseudo
NOT IN( SELECT pseudo FROM chat_bannis ) ORDER BY pseudo
0
cs_PoFMaN Messages postés 58 Date d'inscription dimanche 12 décembre 2004 Statut Membre Dernière intervention 21 juin 2006
16 juin 2006 à 11:29
pourquoi <> plutot que !=? Sous Oracle et MySQL j'ai toujours utilisé !=
0
cs_prolix Messages postés 5 Date d'inscription vendredi 9 juin 2006 Statut Membre Dernière intervention 16 juin 2006
16 juin 2006 à 11:36
ah bon
alors ok, je le note
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
David_monchy Messages postés 214 Date d'inscription lundi 20 mars 2006 Statut Membre Dernière intervention 23 juin 2006 1
16 juin 2006 à 13:38
salut,
bon, aucune des deux solutions ne fonctionne. pour celle de prolix, il me met une erreur entre le 'NOT IN( 'et le 'SELEcT'. Pour pofman, la requete s'exécute mais elle ne renvoie rien, alors que mes utilisateurs ne sont pas tous bannis. Auriez-vous une autre idée?
David
0
cs_PoFMaN Messages postés 58 Date d'inscription dimanche 12 décembre 2004 Statut Membre Dernière intervention 21 juin 2006
16 juin 2006 à 14:06
Arf oui me suis planté avec ca ca devrai marcher (je l'ai testé):

select cuser.id_user, cuser.pseudo from chat_user cuser where not exists (select cban.* from chat_bannis cban where cban.pseudo=cuser.pseudo) order by cuser.pseudo
0
David_monchy Messages postés 214 Date d'inscription lundi 20 mars 2006 Statut Membre Dernière intervention 23 juin 2006 1
16 juin 2006 à 14:20
il me dit:
You have an error in your SQL syntax near 'exists ( select cban .
* from chat_bannis cban where cban . pseudo = cuser .' at line 1
bon je ne comprends pas trop les alias, mais par exemple comment phpmyadmin sait que cuser correspond à la table des user?
0
cs_benstar Messages postés 81 Date d'inscription vendredi 17 décembre 2004 Statut Membre Dernière intervention 12 octobre 2009
16 juin 2006 à 15:54
id_user et id_banis sont autoincrementes ? si oui ce sera plus simple. tu fais SELECT id_user,pseudo FROM chat_user WHERE id_user not in ( SELECT id_banis FROM chat_bannis ) ORDER BY pseudo.
0
cs_PoFMaN Messages postés 58 Date d'inscription dimanche 12 décembre 2004 Statut Membre Dernière intervention 21 juin 2006
16 juin 2006 à 21:13
Pour les alias, MySQL le sai parce que après le from tu as "NOMdeLAtable ALIASdeCETTEtable, ..." en clair l'alias tu le défini en le mettant apres le nom de la table dans le from. (si ca te gene tu peu les virer c pas necessaire mais comme ca fait une requete plus courte je trouve ça plus lisible)

Sinon pour la requete, ben je comprend pas trop pourquoi t'as une erreur, t'as quoi comme version de MySQL? Moi j'ai testé la requete avec la version 4.1.12 sur des tables pareil sauf que y a une table avec des utilisateur simple et une autre table avec les pseudos des utilisateurs simples qui ont des droits. T'as vérifié les nom de tables, ou de champ (je me suis peut etre planté dessus)?
0
David_monchy Messages postés 214 Date d'inscription lundi 20 mars 2006 Statut Membre Dernière intervention 23 juin 2006 1
19 juin 2006 à 09:53
salut,
benstar, id_user et id_bannis ne sont pas autoincrémenté, puisque les utilisateurs peuvent etre "débannis", donc je n'ai pas trop envie d'utiliser un chiffre juste pour un mec qui sera banni 5 minutes... (oui je sais c'est bete de débannir au bout de 5 minutes mais j'aimerais que ce soit possible). A part cela, ta requete ne fonctionne pas non plus...
Sinon, pour ma version de MySQL, c'est la 3.23.58, avec phpmyadmin version 2.6.4-pl3 (je ne sais pas si c'est dû à cela...).
0
cs_PoFMaN Messages postés 58 Date d'inscription dimanche 12 décembre 2004 Statut Membre Dernière intervention 21 juin 2006
21 juin 2006 à 10:17
Salut,


pour la mienne ca doit etre à cause de la version de MySQL la en ce
moment j'ai pas de MySQL installé sur le pc (suis pas chez moi) alors
je peu pas trop d'aider désolé
0
Rejoignez-nous