Probleme order by field et limit
Résolu
lowkey
-
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
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
A voir également:
- Probleme order by field et limit
- La shoes by avis - Forum Consommation & Internet
- 552 size limit exceeded ✓ - Forum Réseaux sociaux
- Your browser sent a request that this server could not understand. size of a request header field exceeds server limit. ✓ - Forum Réseaux sociaux
- Ads by images+ ✓ - Forum Virus
- By click downloader avis - Forum Enregistrement / Traitement audio
12 réponses
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.
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.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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
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
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 ?
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 ?
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?
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?
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é ?
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é ?
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
(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