Probleme order by field et limit

Résolu/Fermé
lowkey - 7 avril 2008 à 13:05
 lowkey - 7 avril 2008 à 15:20
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 samedi 19 janvier 2008 Statut Membre Dernière intervention 23 octobre 2012 114
7 avril 2008 à 15:13
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 samedi 19 janvier 2008 Statut Membre Dernière intervention 23 octobre 2012 114
7 avril 2008 à 14:01
Pourquoi donc ?

Pourquoi ne pas essayer ?
1
Dalida Messages postés 6728 Date d'inscription mardi 14 mai 2002 Statut Contributeur Dernière intervention 11 janvier 2016 921
7 avril 2008 à 13:23
salut,

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

0
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 samedi 19 janvier 2008 Statut Membre Dernière intervention 23 octobre 2012 114
7 avril 2008 à 13:56
Ne serait-ce pas plutôt LIMIT 1,20 ?
0
LIMIT 1, 20 ne va pas prendre en compte le premier enregistrement
0
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 samedi 19 janvier 2008 Statut Membre Dernière intervention 23 octobre 2012 114
7 avril 2008 à 14:21
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
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 samedi 19 janvier 2008 Statut Membre Dernière intervention 23 octobre 2012 114
7 avril 2008 à 14:39
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
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
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