Probleme order by field et limit

Résolu
lowkey -  
 lowkey -
Bonjour,

Voici ma requete (sous MySQL) :

SELECT champ1 FROM table1 WHERE champ2='coucou' ORDER BY champ3, field (champ4, 1,2,5,6)

Elle marche tres bien.

Si je rajoute 'limit 0,20', MySQl me dit que ma syntaxe n'est pas bonne...

Quelqu'un a une idée du pourquoi?

Merci d'avance

12 réponses

croy Messages postés 453 Date d'inscription   Statut Membre Dernière intervention   114
 
Tu as un caractère non imprimable qui traîne dans ta commande générée autour du field.

J'ai créé un jeu d'essai puis copié/collé ta commande ci-dessus dans mon client sal : mysql répond

ERROR 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 '(jj.cp, 69000, 38000) LIMIT 0, 20' at line 5

J'efface et retape field et ça marche.

Retape ton code qui génère le field et ça devrait marcher.
3
croy Messages postés 453 Date d'inscription   Statut Membre Dernière intervention   114
 
Pourquoi donc ?

Pourquoi ne pas essayer ?
1
Dalida Messages postés 6728 Date d'inscription   Statut Contributeur Dernière intervention   922
 
salut,

il interprète peut être l'interval comme une décimale.
essaie :
LIMIT 0, 20

0
lowkey
 
Salut,

J'ai tout essayé :

LIMIT 0, 20
limit 0, 20
LIMIT 20
...

Rien à faire...
0

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

Posez votre question
croy Messages postés 453 Date d'inscription   Statut Membre Dernière intervention   114
 
Ne serait-ce pas plutôt LIMIT 1,20 ?
0
lowkey
 
LIMIT 1, 20 ne va pas prendre en compte le premier enregistrement
0
lowkey
 
Si ça peut te faire plaisir...

Réponse de MySQl :

#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 '(champ4, 1,2,5,6) LIMIT 1, 20' at line 1
0
croy Messages postés 453 Date d'inscription   Statut Membre Dernière intervention   114
 
Je fais amende honorable : le premier argument de LIMIT est un offset et non un rang. Ma méprise vient du fait que j'utilise exclusivement LIMIT avec un seul argt.

Pour en revenir à ton pb, j'ai essayé la requête select login,mdp from tblmdp order by login,field(mdp,'aaa','bbb') limit 0,3; qui fonctionne sans pb.

Tu dois avoir un autre pb. Quel diagnostic exact (copier/coller) est affiché pour quelle requête ?
0
lowkey
 
Voica ma requete exacte :

SELECT t.id_artisan
FROM travail_artisan t
INNER JOIN travail_artisan t1 ON t1.id_artisan = t.id_artisan AND t1.id_prestation=12
INNER JOIN cp_artisan jj ON jj.id_artisan = t.id_artisan AND (jj.cp=69000 OR jj.cp=38000)
WHERE t.id_prestation=13 order by t.niveau , field (jj.cp, 69000, 38000) LIMIT 0, 20

Avec deux tables :

travail_artisan : id_artisan, id_prestation ( 3'546'702 entrées)
cp_artisan : id_artisan, cp (384'221 entrées)

Sans LIMIT, j'obtient 34267 enregistrements. Avec la LIMIT, j'obtient un plantage... Si j'enleve , field (jj.cp, 69000, 38000) et que je laisse le LIMIT, ça marche aussi. La logique voudrait donc qu'il y ait un probleme entre field et limit !? non?
0
croy Messages postés 453 Date d'inscription   Statut Membre Dernière intervention   114
 
Première suggestion : puisque tu as ... AND (jj.cp=69000 OR jj.cp=38000) ... tu peux supprimer l'appel de field (jj.cp, 69000, 38000) dans ORDER BY en le remplaçant par jj.cp DESC

Ceci contourne peut-être ton pb.

Si ce n'est pas le cas il faut chercher plus loin.

Dans ton dernier message tu dis "plantage" dans un message précédent tu dis "MySQl me dit que ma syntaxe n'est pas bonne" : qu'est-ce-qui se passe exactement ? quel message (tout le message STP) est affiché ?
0
lowkey
 
Je suis obligé de me servir de field car ma condition sur les cp est générée par du PHP et l'ordre de ces cp est primordial.
(il peux y avoir jusqu'a 74 cp dans ma condition)

Le message d'erreur de MySQL est celui que j'ai collé dans un précédent post. Je recole le vrai :

MySQL a répondu:

#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 '(jj.cp, 69000, 38000) LIMIT 0, 20' at line 1
0
lowkey
 
roooooooooooooooooooo le boulet !!!

Effectivement, field est une fonction... et j'ai mis un espace entre field et (...
Sans limite, ça marchait bien...

Hop, on enlève l'espace et c'est magique !!

Merci beaucoup croy !!

6h de prise de tete pour un espace...

Encore merci !
0