qu'est ce qui cloche dans ma requete?

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : qu'est ce qui cloche dans ma requete?

par Ryle » 26 mars 2008, 23:08

Ta requête fonctionne, mais...
- prends l'habitude de mettre TOUS les champs non groupés du select dans le GROUP BY, et pas juste un au hasard... MySQL arrive à s'en passer, mais c'est bien le seul SGBD à le faire...
- si menu_semaine est un int, tinyint, number, etc. il ne FAUT PAS mettre d'apostrophe autour des valeurs, ce sont des nombres, pas des chaines
- enfin, ton dernier AS asa donne l'alias "asa" à la "table" constituée de l'union de tes sous requête. Le même alias que celui que tu donnes à tes champs. C'est très confusant, surtout si c'est pour ne pas l'utiliser, autant ne pas le mettre :)
- Et tant qu'on y est, indente tes requête SQL également, il n'y a pas que le php que l'indentation rend plus lisible ;)

Code : Tout sélectionner

SELECT DISTINCT admin_id, menu_semaine, asa FROM ( ( SELECT DISTINCT admin_id, menu_semaine, count( menu_jour ) AS asa FROM cantine.menu_utilisateur WHERE menu_semaine = 10 GROUP BY admin_id, menu_semaine ) UNION ( SELECT DISTINCT admin_id, menu_semaine, count( menu_jour ) AS asa FROM cantineln.menu_utilisateur WHERE menu_semaine = 10 GROUP BY admin_id, menu_semaine ) )

par jp.kerloch » 26 mars 2008, 17:27

Code : Tout sélectionner

SELECT DISTINCT admin_id, menu_semaine, asa FROM ( ( SELECT DISTINCT admin_id, menu_semaine, count( menu_jour ) AS asa FROM cantine.menu_utilisateur WHERE menu_semaine = '10' GROUP BY admin_id ) UNION ( SELECT DISTINCT admin_id, menu_semaine, count( menu_jour ) AS asa FROM cantineln.menu_utilisateur WHERE menu_semaine = '10' GROUP BY admin_id ) ) AS asa

par zeus » 26 mars 2008, 17:16

Dans une requête "SELECT champs FROM table", il faut que les champs du SELECT soient présent dans la table de la clause FROM.

Dans une requête "SELECT champs FROM (SELECT champs2 FROM table2)", il faut que les champs du 1er SELECT soit présent dans les champs du 2nd SELECT (celui qui est dans le FROM de la 1ère requête)

Dans ton cas, comme dans tes "SELECT DISTINCT ..." il n'y a pas de champ "menu_jour", le SELECT global ne peux pas le trouver.

NB : "count(menu_jour) as nb_repas" retourne un champ "nb_repas", pas un champ "menu_jour" ;)

par jp.kerloch » 26 mars 2008, 17:08

Comment je peux faire.. je comprends pas trop !

par zeus » 26 mars 2008, 17:03

le message d'erreur signifie qu'il ne trouve pas la colonne "menu_jour" dans la liste des colonnes.

Et effectivement, chacun de tes select remonte une colonne nb_repas, mais pas de "menu_jour"

par jp.kerloch » 26 mars 2008, 16:39

oui c'est voici le message d'erreur : #1248 - Every derived table must have its own alias

Maintenant j'ai fait ca comme requete

Code : Tout sélectionner

SELECT DISTINCT admin_id, menu_semaine, count( menu_jour ) AS Nb_repas FROM ( ( SELECT DISTINCT admin_id, menu_semaine, count( menu_jour ) AS Nb_repas FROM cantine.menu_utilisateur WHERE menu_semaine = '10' GROUP BY admin_id ) UNION ( SELECT DISTINCT admin_id, menu_semaine, count( menu_jour ) AS Nb_repas FROM cantineln.menu_utilisateur WHERE menu_semaine = '10' GROUP BY admin_id ) ) Nb_repas ORDER BY admin_id ASC
par contre j'ai ca comme erreur ...
#1054 - Unknown column 'menu_jour' in 'field list'

Un ti coup de main ca ne serait pas refu !!! je ne suis pas une brtue epaisse en SQL !

par Ryle » 26 mars 2008, 16:26

- L'absence de GROUP BY dans chaque sous requête alors qu'une fonction de groupe est appliquée ?
- L'absence d'une partie des champs "non groupés" dans le GROUP BY de la requête principale ?
- Le fait d'avoir mit des apostrophes autour d'un nombre alors que le champ est probablement de type numérique ?
- Le fait de faire appel au champ menu_jour dans la requête principale alors que celui-ci n'est pas retournée par les sous requête (c'est bien la peine de lui avoir donné un alias)

...

A part cela, peut être qu'un message d'erreur où une idée de ce qui se passe par rapport à ce qui devrait se passer nous donnerait (comme à toi) plus d'idées sur ce qu'il faut chercher exactement dans un premier temps ;)

Ps : ah oui, au fait.... on a un forum SQL ! :P

qu'est ce qui cloche dans ma requete?

par jp.kerloch » 26 mars 2008, 15:57

voici ma requete .

J'aimerai savoir ce qu'il cloche.
Merci

Code : Tout sélectionner

SELECT DISTINCT admin_id, menu_semaine, count( menu_jour ) AS Nb_repas FROM ( ( SELECT DISTINCT admin_id, menu_semaine, count( menu_jour ) AS Nb_repas FROM cantine.menu_utilisateur WHERE menu_semaine = '10' ) UNION ( SELECT DISTINCT admin_id, menu_semaine, count( menu_jour ) AS Nb_repas FROM cantineln.menu_utilisateur WHERE menu_semaine = '10' ) ) GROUP BY admin_id ORDER BY admin_id ASC