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

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [MySQL] Sous-requête

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[MySQL] Sous-requête

n°1115624
Fane_CHP
Posté le 10-06-2005 à 13:05:23  profilanswer
 

Hello
 
Je cherche à faire une requête imbriquée du type

Code :
  1. SELECT *
  2. FROM `inscrire`
  3. WHERE `saisons_id` = (
  4. SELECT MAX( `saisons_id` )
  5. FROM `inscrire` )


 
et ça marche pô
 
La je sais, elle sert à rien mis c'est pour l'exemple.
 
Serveur Mysql 5
 
Je suppose que c'est un problème de syntaxe mais je sèche...
 
Merci de votre aide


---------------
Just Free It
mood
Publicité
Posté le 10-06-2005 à 13:05:23  profilanswer
 

n°1115641
simogeo
j'ai jamais tué de chats, ...
Posté le 10-06-2005 à 13:17:36  profilanswer
 

quel est le message d'erreur?

n°1115663
Fane_CHP
Posté le 10-06-2005 à 13:33:28  profilanswer
 

Je reprends un exemple:
 
requete qui marche:

Code :
  1. SELECT villes.villes_nom, COUNT( * )
  2. FROM adherents, villes
  3. WHERE (
  4. (
  5. adherents.villes_id = villes.villes_id
  6. ) AND (
  7. villes.villes_cp
  8. IN ( 94290, 94480 )
  9. )
  10. )
  11. GROUP BY villes.villes_nom


 
ca me donne les comptes
 
maintenant, je veux étendre le nombre de code postaux:
 

Code :
  1. SELECT villes.villes_nom, COUNT( * )
  2. FROM adherents, villes
  3. WHERE (
  4. (
  5. adherents.villes_id = villes.villes_id
  6. ) AND (
  7. villes.villes_cp
  8. IN (SELECT villes.villes_cp
  9. FROM villes)
  10. )
  11. )
  12. GROUP BY villes.villes_nom


 
Erreur:
 

Citation :

#1064 - You have an error in your SQL syntax.  Check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT villes.villes_cp
FROM villes ) ) )
GROUP  BY villes.vill  


 
Merci de ton aide simogeo


Message édité par Fane_CHP le 10-06-2005 à 13:38:13

---------------
Just Free It
n°1115670
gfa
Posté le 10-06-2005 à 13:42:08  profilanswer
 

Fane_CHP a écrit :

Je reprends un exemple:
 
requete qui marche:

Code :
  1. SELECT villes.villes_nom, COUNT( * )
  2. FROM adherents, villes
  3. WHERE (
  4. (
  5. adherents.villes_id = villes.villes_id
  6. ) AND (
  7. villes.villes_cp
  8. IN ( 94290, 94480 )
  9. )
  10. )
  11. GROUP BY villes.villes_nom


 
ca me donne les comptes
 
maintenant, je veux étendre le nombre de code postaux:
 

Code :
  1. SELECT villes.villes_nom, COUNT( * )
  2. FROM adherents, villes
  3. WHERE (
  4. (
  5. adherents.villes_id = villes.villes_id
  6. ) AND (
  7. villes.villes_cp
  8. IN (
  9. SELECT villes.villes_cp
  10. FROM villes
  11. )
  12. )
  13. )
  14. GROUP BY villes.villes_nom


 
Erreur:
 

Citation :

#1064 - You have an error in your SQL syntax.  Check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT villes.villes_cp
FROM villes ) ) )
GROUP  BY villes.vill  


 
Merci de ton aide simogeo


Salut,
 
Essaie plutôt de faire des jointures... Cela rends ta requête plus claire (enfin pour ma part)... Ensuite, ta sous-requête n'est pas très intéressantes puisqu'elle pourrait te ramener plusieurs CP. Donc il faut faire un group by dessus. Ce qui fait que ta requête, si je ne me suis pas trompé, devrait être:

Code :
  1. SELECT v.villes_nom, COUNT( * ) FROM adherents a INNER JOIN villes v on a.villes_id = v.villes_id WHERE v.villes_cp IN (SELECT villes_cp FROM Villes GROUP BY Villes_cp) GROUP BY v.villes_nom


Voilà... J'espère que cela pourra t'aider.
 
A+

n°1115678
Fane_CHP
Posté le 10-06-2005 à 13:52:10  profilanswer
 

J'ai toujours la même erreur
 
Ca s'était un exemple simplifié. La requete finale que je cherche à faire est sur 5 ou 6 tables, je vous ai épargné le truc ... ;)  
 
Le inner join, c'est normal qu'il y ait des a et de v qui se balladent.?


---------------
Just Free It
n°1115731
onizuka_se​nsei
Posté le 10-06-2005 à 14:19:44  profilanswer
 

ce sont des alias de tables pour qu'elles aient un nom plus courts et donc qui rendent la requête un petit moins bordélique :)


Message édité par onizuka_sensei le 10-06-2005 à 14:20:08
n°1115741
Arjuna
Aircraft Ident.: F-MBSD
Posté le 10-06-2005 à 14:24:51  profilanswer
 

T'es sûr que c'est une version 5 ?
Parceque le comportement et le message d'erreur, ça ressemble à une version < 4.1
 
Peut-être un problème de paramètrage.
 
En tout cas, la première requête est bonne.
 
PS: Vilre les `, c'est dégueulasse, pas standard, ça sert à rien et j'aime pas ça.
PS²: Les a et v qui se baladent, ce sont des alias, pour éviter de recopier tout le nom de la table à chaque fois qu'on appelle un champ de la table.

n°1115744
Fane_CHP
Posté le 10-06-2005 à 14:26:03  profilanswer
 

OK pour les alias, ça peut servir.
 
Mais la sous-requête ne marche toujours pas, j'ai la même erreur (avec un inner join, ça ne me donne plus rien par contre)


---------------
Just Free It
n°1115751
Arjuna
Aircraft Ident.: F-MBSD
Posté le 10-06-2005 à 14:29:24  profilanswer
 

Moi je te dis, problème de paramètrage, ou alors tu confonds la version de MySQL avec celle d'un autre outils

n°1115920
Fane_CHP
Posté le 10-06-2005 à 15:59:40  profilanswer
 

Non j'ai fumé, c'est une 4.0.17 (OVH)
 
Est-ce qu'il y a une solution avec un JOIN?
 
j'explique ce que je veux faire:
 
table1: adherents {adherents_id, adherents_nom...... }
table2: saisons { saisons_id, saisons_libelle ......}
table3: inscrire {adherents_id, saisons_id)
+ d'autres qui ne posent pas de problèmes.
 
Je veux les adhérents inscrits pour la saison en cours
 
J'avais donc pensé à un  

Code :
  1. SELECT adherents.*
  2. FROM adherents, inscrire, saisons
  3. WHERE ((adherents.adherents_id=inscrire.adherents_id)
  4. AND (inscrire.saisons_id=saisons.saisons_id)
  5. AND (saisons_saisons_libelle=(SELECT MAX(saisons_libelle) FROM saisons)))


 
Vu que le serveur n'a pas l'air d'apprecier, comment faire. Merci ... :jap:


---------------
Just Free It
mood
Publicité
Posté le 10-06-2005 à 15:59:40  profilanswer
 

n°1116061
Fane_CHP
Posté le 10-06-2005 à 17:30:00  profilanswer
 

et bah voila, j'ai essayé sur une 4.1.11 et ma sous requete marche. Plus qu'a attendre que mon hébergeur valide une 4.1.x.
 
A moins que someone ait une solution équivalente qui marche sur une 4.0.x


---------------
Just Free It
n°1118236
Fane_CHP
Posté le 13-06-2005 à 12:49:45  profilanswer
 

:cry:


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

  [MySQL] Sous-requête

 

Sujets relatifs
[MySQL] Requête d'update particulière[MySQL] Pb de requete UPDATE très lente
Requête avec soustraction ou addition avec des valeurs max en MySQLrequete mysql qui me donne une page blache...
[MySQL]résoudre une égalité dans une requête de classement[MySQL] Question sur les dates et sur 1 requete SQL
Exporter resultat requete php/mysql a la suite d'un fichier existantProblème avec requête sous MySQL
MySql et gros fichier de requeterequete mysql pour gerer un planning
Plus de sujets relatifs à : [MySQL] Sous-requête


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