IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

ORDER BY compliqué et LIMIT


Sujet :

Langage SQL

  1. #1
    Membre régulier
    Inscrit en
    Mars 2004
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 162
    Points : 75
    Points
    75
    Par défaut ORDER BY compliqué et LIMIT
    Bonjour,

    Cela fonctionne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT * 
    FROM members 
    ORDER BY 
     (SELECT COUNT (*) 
      FROM photos 
      WHERE user_id = members.user_id 
       AND approved='yes') DESC
    Mais ceci ne fonctionne pas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT * 
    FROM members 
    ORDER BY 
     (SELECT COUNT (*) 
      FROM photos 
      WHERE user_id = members.user_id 
       AND approved='yes') DESC 
    LIMIT 0, 20
    Pourquoi la LIMIT pose problème dans ce cas ?

    Si le ORDER BY ne concernait qu'un champ je sais que celà fonctionnerait, comme ça par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT * 
    FROM members 
    ORDER BY user_id DESC 
    LIMIT 0, 20

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 102
    Points : 28 384
    Points
    28 384
    Par défaut
    Que signifie "ne fonctionne pas" ?

  3. #3
    Membre régulier
    Inscrit en
    Mars 2004
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 162
    Points : 75
    Points
    75
    Par défaut
    Cela:

    #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 '*) FROM photos WHERE user_id = members.user_id AND approved='yes') DESC L' at line 1

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 102
    Points : 28 384
    Points
    28 384
    Par défaut
    Et en passant par une table dérivée ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT  *
    FROM    (   SELECT * 
                FROM members 
                ORDER BY    
                    (   SELECT COUNT (*) 
                        FROM photos 
                        WHERE user_id = members.user_id 
                        AND approved='yes'
                    ) DESC
            ) 
    LIMIT 0, 20

  5. #5
    Membre régulier
    Inscrit en
    Mars 2004
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 162
    Points : 75
    Points
    75
    Par défaut
    Pareil !

    Note importante pour la suite: J'effectue mes requêtes dans phpmyadmin.

    Le truc qui m'inquiète c'est que j'ai dis que cela fonctionnait:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT * 
    FROM members 
    ORDER BY 
     (SELECT COUNT (*) 
      FROM photos 
      WHERE user_id = members.user_id 
       AND approved='yes') DESC
    Quand j'exécute cette requête (dans phpmyadmin donc) il me récapitule comme ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SQL query:
    SELECT *
    FROM members
    ORDER BY (
    SELECT COUNT( * )
    FROM photos
    WHERE user_id = members.user_id
    AND approved = 'yes'
    ) DESC
    LIMIT 0 , 30
    => Il me rajoute automatiquement un LIMIT !!! Mais si je le mets dans ma requête dés le début (donc si j'exécute exactement ce que j'ai dans la requête qu'il me récapitule), et bien ca marche pas...

  6. #6
    Membre régulier
    Inscrit en
    Mars 2004
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 162
    Points : 75
    Points
    75
    Par défaut
    Au secours, ça marche maintenant, je regarde ce qui cloche et je vous dis !

  7. #7
    Membre régulier
    Inscrit en
    Mars 2004
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 162
    Points : 75
    Points
    75
    Par défaut
    Ah ah

    J'adore l'informatique !!!

    Alors ceci fonctionne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM members ORDER BY (SELECT COUNT(*) FROM photos WHERE videos.user_id = members.user_id AND approved = 'yes') DESC
    Ceci aussi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM members ORDER BY (SELECT COUNT (*) FROM photos WHERE videos.user_id = members.user_id AND approved = 'yes') DESC
    Ou encore cela:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM members ORDER BY (SELECT COUNT(*) FROM photos WHERE photos.user_id = members.user_id AND approved = 'yes') DESC LIMIT 0 , 20
    Mais surtout pas cela:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM members ORDER BY (SELECT COUNT (*) FROM photos WHERE photos.user_id = members.user_id AND approved = 'yes') DESC LIMIT 0 , 20
    Voyez-vous la subtilité ? L'espace après le COUNT est possible si on met pas de LIMIT dans la requête, mais fonctionne si on ne le met pas !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Order by parametre1, Rand() LIMIT 5
    Par johan_m dans le forum Requêtes
    Réponses: 5
    Dernier message: 27/06/2013, 15h32
  2. [MySQL] présenter une requête avec ORDER BY id DESC LIMIT
    Par kogoi dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 17/11/2011, 18h18
  3. Order By field() et limit
    Par lowkey dans le forum Langage SQL
    Réponses: 0
    Dernier message: 07/04/2008, 12h01
  4. Requete multi table avec LIMIT et ORDER BY
    Par yobogs dans le forum Requêtes
    Réponses: 1
    Dernier message: 31/10/2006, 17h29
  5. Réponses: 5
    Dernier message: 10/07/2006, 12h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo