Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2676 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [MySQL] pb avec une requête et EXISTS

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[MySQL] pb avec une requête et EXISTS

n°1620522
nero27
Posté le 08-10-2007 à 14:03:08  profilanswer
 

Bonjour à tous,

 

Je rencontre actuellement un problème avec une requête qui fonctionne bien sous MySQL 5 en local mais pas en MySQL 3.23 sur mon serveur.

 

J'ai les 2 tables suivantes :

 

CONTACT
---------
+ id_user
+ contact

 

CONNECTES
-----------
+ id_user
+ pseudo

 

Je voudrais récupérer les contacts connectés et j'utilise la requête suivante :

Code :
  1. select c1.id_user,c1.pseudo from connectes c1 where exists (select * from contact c2 where c2.id_user=1 and c2.contact=c1.id_user) order by pseudo asc
 

Celle-ci fonctionne bien en local mais pas sur le serveur : pourriez-vous m'aider ?

 

Merci d'avance :jap:


Message édité par nero27 le 08-10-2007 à 14:03:29
mood
Publicité
Posté le 08-10-2007 à 14:03:08  profilanswer
 

n°1620530
anapajari
s/travail/glanding on hfr/gs;
Posté le 08-10-2007 à 14:09:35  profilanswer
 

pas de subquery sur mysql avec la version 4.1

 

edit: mais tu peux t'en sortir en re-ecrivant ta requete avec un left outer + where is null


Message édité par anapajari le 08-10-2007 à 14:10:00
n°1620533
nero27
Posté le 08-10-2007 à 14:13:15  profilanswer
 

Arf, ceci explique cela :/
 
Par contre, je ne suis pas très doué en SQL et le left outer, je ne maitrise pas : tu pourrais m'aider ?

n°1620545
nero27
Posté le 08-10-2007 à 14:25:40  profilanswer
 

C'est bon, je m'en suis sorti avec la doc :
 

Code :
  1. SELECT connectes. * FROM connectes
  2. LEFT JOIN contact ON connectes.id_user = contact.contact
  3. WHERE contact.id_user=1 
  4. ORDER BY pseudo ASC


 
Merci pour ton aide :jap:

n°1620546
anapajari
s/travail/glanding on hfr/gs;
Posté le 08-10-2007 à 14:30:52  profilanswer
 

Bon alors:
1- j'avais dit des conneries :) vu que tu avais un exists ( et pas un not exists) il fallait bien entendu te servir de inner join et non de left outer + where is null

 

2- c'est pas très beau la façon dont tu as écris la requete.
En fait, tu fais un left outer que tu transformes en mettant une condition sur ta table "left jointée" dans le where.
Je te conseillerais fortement de faire

Code :
  1. SELECT connectes. * FROM connectes
  2.     INNER contact ON connectes.id_user = contact.contact
  3.     WHERE contact.id_user=1 
  4.     ORDER BY pseudo ASC


Par ailleurs, MagicBuzz a fait un topic sur les bases du SQL, il y a un très bon post sur les jointures, je te conseille d'y jeter un oeil.

 

3- Sauf pour des tests, ne jamais faire de "select * ", toujours décrire la liste des champs attendus ( le jour ou tu auras une modification de structure de ta table  tu comprendras pourquoi :) )

Message cité 1 fois
Message édité par anapajari le 08-10-2007 à 14:31:43
n°1620597
nero27
Posté le 08-10-2007 à 15:39:28  profilanswer
 

anapajari a écrit :

Bon alors:
1- j'avais dit des conneries :) vu que tu avais un exists ( et pas un not exists) il fallait bien entendu te servir de inner join et non de left outer + where is null
 
2- c'est pas très beau la façon dont tu as écris la requete.
En fait, tu fais un left outer que tu transformes en mettant une condition sur ta table "left jointée" dans le where.
Je te conseillerais fortement de faire

Code :
  1. SELECT connectes. * FROM connectes
  2.     INNER contact ON connectes.id_user = contact.contact
  3.     WHERE contact.id_user=1 
  4.     ORDER BY pseudo ASC


Par ailleurs, MagicBuzz a fait un topic sur les bases du SQL, il y a un très bon post sur les jointures, je te conseille d'y jeter un oeil.
 
3- Sauf pour des tests, ne jamais faire de "select * ", toujours décrire la liste des champs attendus ( le jour ou tu auras une modification de structure de ta table  tu comprendras pourquoi :) )


1 et 2- Merci pour ton aide :jap:
Je regarderai le post de MagicBuzz, ça devrait m'aider :)
 
3- C'était pour le post que j'avais mis *, je détaille sinon ;)

n°1620604
nero27
Posté le 08-10-2007 à 15:44:48  profilanswer
 

Ce ne serait pas inner join plutot que inner ?

n°1620807
anapajari
s/travail/glanding on hfr/gs;
Posté le 09-10-2007 à 09:22:53  profilanswer
 

oui oui manque le join après le inner :o

n°1620924
nero27
Posté le 09-10-2007 à 11:11:38  profilanswer
 

Dis-le que tu voulais voir si je suivais [:cupra]

n°1621269
MagicBuzz
Posté le 09-10-2007 à 17:42:20  profilanswer
 

:lol:


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [MySQL] pb avec une requête et EXISTS

 

Sujets relatifs
[mysql] filtre: recherche de hausse de prixPHP / MySQL Recherche d'images par mots-clés
PHP / WAMP : version client API Mysql[SQL] Optimisation de requête "regroupement X-en-1" (tri ?)
Optimisation requête (Mysql)[Mysql 5] Connaitre le microtime de la date courante
[SQL] Requête UPDATE complexe[mySQL] Pbr de rapidité d'execution d'une requete
Mysql : requete avec EXISTSPb requete MYSQL avec NOT EXISTS
Plus de sujets relatifs à : [MySQL] pb avec une requête et EXISTS


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR