Probleme order by field et limit
Résolu/Fermé
A voir également:
- Probleme order by field et limit
- Your browser sent a request that this server could not understand. size of a request header field exceeds server limit. ✓ - Forum Réseaux sociaux
- Home by me - Télécharger - 3D
- To be filled by o.e.m - Forum Windows
- Moa by bva avis ✓ - Forum Vos droits sur internet
- Message bounced by administrator - Forum Mail
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
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.
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.
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
7 avril 2008 à 14:01
Pourquoi donc ?
Pourquoi ne pas essayer ?
Pourquoi ne pas essayer ?
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
7 avril 2008 à 13:23
salut,
il interprète peut être l'interval comme une décimale.
essaie :
il interprète peut être l'interval comme une décimale.
essaie :
LIMIT 0, 20
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
7 avril 2008 à 13:56
Ne serait-ce pas plutôt LIMIT 1,20 ?
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
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
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 ?
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?
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
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é ?
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