Rechercher : dans
Par :

Probleme order by field et limit

Dernière réponse le 7 avr 2008 à 15:20:13 lowkey, le 7 avr 2008 à 13:05:25 
 Signaler ce message aux modérateurs

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

Configuration: Windows XP
Internet Explorer 7.0

Meilleures réponses pour « Probleme order by field et limit » dans :
MySQL – Optimisation VoirL’optimisation au niveau de MySQL passe par trois composants, à savoir : Optimisation du serveur MySQL Optimisation de la base de données Optimisation des requêtes Optimisation de la configuration de serveur MySQL L’optimisation du serveur peut...
Configuration du Framework Acegi dans application Web JAVA J2EE VoirEtape 1: Mettre le acegi-security-1.0.0-RC2.jar sous le répertoire lib de votre application: Etape 2: Configuration des listeners et des filtres: Etape 3: Configuration des filtres et des listeners dans le fichier web.xml: Etape 4:...
SQL - Tri VoirTri des résultats Il est possible en SQL d'organiser les résultats grâce à la clause ORDER BY. La clause ORDER BY est suivie des mots clés ASC ou DESC, qui précisent respectivement si le tri se fait de manière croissante (par défaut) ou...

1

Dalida, le 7 avr 2008 à 13:23:01

Salut,

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

LIMIT 0, 20

[ Mathieu ]
Le travail est un trésor. Le travail des autres, cela va de soi.
Henri Jeanson

Répondre à Dalida

2

lowkey, le 7 avr 2008 à 13:36:47

Salut,

J'ai tout essayé :

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

Rien à faire...

Répondre à lowkey

3

croy, le 7 avr 2008 à 13:56:59

Ne serait-ce pas plutôt LIMIT 1,20 ?

Répondre à croy

4

lowkey, le 7 avr 2008 à 13:59:03

LIMIT 1, 20 ne va pas prendre en compte le premier enregistrement

Répondre à lowkey

5

croy, le 7 avr 2008 à 14:01:34
  • +1

Pourquoi donc ?

Pourquoi ne pas essayer ?

Répondre à croy

6

lowkey, le 7 avr 2008 à 14:11:32

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épondre à lowkey

7

croy, le 7 avr 2008 à 14:21:35

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 ?

Répondre à croy

8

lowkey, le 7 avr 2008 à 14:32:17

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?

Répondre à lowkey

9

croy, le 7 avr 2008 à 14:39:48

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é ?

Répondre à croy

10

lowkey, le 7 avr 2008 à 14:45:21

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

Répondre à lowkey

11

croy, le 7 avr 2008 à 15:13:28
  • +3

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.

Répondre à croy

12

 lowkey, le 7 avr 2008 à 15:20:13

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 !

Répondre à lowkey
Collection CommentÇaMarche.net