MySql order by

Discussion dans 'Développement d'un site Web ou d'une appli mobile' créé par sim100, 7 Décembre 2012.

  1. sim100
    sim100 WRInaute passionné
    Inscrit:
    2 Février 2003
    Messages:
    1 380
    J'aime reçus:
    1
    Bonjour,

    J'ai une table avec notement un champs "exclusive" qui a pour valeur Yes ou No et un champs "featured" qui a pour valeur Yes ou No

    Je voudrais sortir les éléments de la table, en les classant:
    En premier ceux qui ont pour champs "exclusive"=Yes
    Puis ceux qui ont pour champs "featured"=No
    Puis le reste, le tout classé par champs date descendant et champs hour descandant :)

    Bon je supose que ça va donner un truc du genre

    Code:
    ORDER BY exclusive=yes, featured=yes, date DESC, hour DESC
    Bref je ne suis pas sur.

    Merci pour votre aide
     
  2. spout
    spout WRInaute accro
    Inscrit:
    14 Mai 2003
    Messages:
    9 024
    J'aime reçus:
    291
  3. YoyoS
    YoyoS WRInaute accro
    Inscrit:
    14 Septembre 2006
    Messages:
    3 249
    J'aime reçus:
    0
    Salut, c'est bien l'order by qu'il faut utiliser vu que tu ne veux pas grouper mais juste trier.
    Il faut voir comment ton sgbd se comporte face à un ORDER BY (boolean). Il met dans l'ordre NULL,FALSE,TRUE ? Ou l'inverse. Tu fais une petite requête et tu le sauras.

    Quand tu le sais, ce sera donc:

    Si c'est inversé:

    Tout dépend de ton test, cela peut être complètement interpreté de façon différente si tu utilises SQLServer, MySQL, Oracle, Postegre, etc...

    Il faut être aussi sure que la valeur ne peut pas être mise à null dans le type de la colonne, sinon tu pourras te retrouver avec des résultats NULL en premier ou non.
     
  4. sim100
    sim100 WRInaute passionné
    Inscrit:
    2 Février 2003
    Messages:
    1 380
    J'aime reçus:
    1
    Ok merci YoyoS
    Ca marche avec
    ORDER BY exclusive DESC, featured DESC, date_input DESC, time_input DESC
    :)
    Merci beaucoup
     
  5. ARcom
    ARcom Nouveau WRInaute
    Inscrit:
    30 Juillet 2012
    Messages:
    26
    J'aime reçus:
    0
    Bonjour,

    Si je peux me permettre un conseil d'optimisation, pour tes champs "exclusive" et "featured", à la place de Yes et No, je te conseillerais d'utiliser 1 et 0. Tes champs "exclusive" et "featured" devant être alors des champs numériques (TINYINT suffit largement).

    Je ne sais pas si c'est le SGBD que tu utilises, mais je sais par expérience que en MySQL, l'utilisation de champs numériques est nettement plus optimisé et efficace que tout autre type de champs, pour tout ce qui est WHERE et surtout pour les clauses ORDER BY. Et ils présentent de nombreux autres avantages (poids, optimisation des index, souplesse, ...)
     
  6. YoyoS
    YoyoS WRInaute accro
    Inscrit:
    14 Septembre 2006
    Messages:
    3 249
    J'aime reçus:
    0


    Attention que tu as dit vouloir l'un à Yes et l'autre à No en premier, donc il ne faut pas mettre DESC pour les 2 champs.

    Et pour ARcom je pense que la valeur Boolean n'existe pas, c'est toujours transformé en binaire au final. Je pense même que c'est exactement pareil qu'un TINYINT(1).
     
  7. iLuc
    iLuc WRInaute discret
    Inscrit:
    14 Avril 2009
    Messages:
    114
    J'aime reçus:
    0
    +1 8)

    Je rajouterai que cette méthode permet aussi de sécurisé l'entrée.
    - On vérifie si $va['champ'] est numérique inférieur ou égale à =< 1

    Et on est tranquille, rien d'autre que 0 / 1 ne peut passé.

    En MySql,
    Tout ce que l'ont peu passer en numérique, c'est beaucoup mieux. :)
    -> plus simple à contrôlé
    -> optimisation de la BDD ( prend moins de place )

    Et ça permet aussi de ce concentré sur les parties plus complexes.
    On réduit le nombre de zones à risques en quelque sorte.

    Donc, que des avantages. :)

    "Tout ce que l'ont peu passer en numérique, c'est beaucoup mieux."
    C'est l'une des principales règles,
    avec aussi "éviter les répétitions" 8)

    Par exemple, pour un Post d'un forum, on ne va pas enregistrer dans la BDD à chaque fois le nom de l'utilisateur.
    On va juste associer l'ID de l'utilisateur. Avec une table dédiée aux noms des utilisateurs.

    Ça permet d'optimiser les tables, et la BDD.
     
Chargement...
Similar Threads - MySql order Forum Date
Mysql : problème de IN et ORDER BY Développement d'un site Web ou d'une appli mobile 23 Août 2012
Requete MySQL et order Développement d'un site Web ou d'une appli mobile 19 Août 2011
MYSQL ORDER BY... somme de colonnes Développement d'un site Web ou d'une appli mobile 7 Janvier 2010
Supprimer les doublons d'une table mysql Développement d'un site Web ou d'une appli mobile 16 Juin 2020
Mysql migration utf8->utf8mb4 Développement d'un site Web ou d'une appli mobile 17 Août 2019
recherche lettres dans mysql Développement d'un site Web ou d'une appli mobile 11 Juillet 2019
cache mysql maison Développement d'un site Web ou d'une appli mobile 18 Février 2019
Stocker dans des variables php les fonctions MySql Développement d'un site Web ou d'une appli mobile 2 Février 2019
message : [LEGACY][libmysqlclient] Please consider moving to stable and mysqlnd in Administration d'un site Web 8 Novembre 2018
Connexion à un serveur mysql distant Développement d'un site Web ou d'une appli mobile 21 Octobre 2018
  1. Ce site utilise des cookies. En continuant à utiliser ce site, vous acceptez l'utilisation des cookies.
    Rejeter la notice