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

PHP & Base de données Discussion :

Paramètres requête ORDER BY RAND()


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2018
    Messages
    537
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Avril 2018
    Messages : 537
    Par défaut Paramètres requête ORDER BY RAND()
    Bonjour,

    J'aimerais effectuer cette requête (champ1 et champ2 sont des nombres)
    Afin d'ordonner les lignes dans cet ordre :

    Phase 1) en premier les lignes qui ont la valeur 'champ1' la plus grande (et pour ceux qui ont la meme valeur 'champ1', ceux qui ont la plus grande valeur 'champ2')
    Phase 2) suivis de celles qui ont une valeur 'champ1' plus petite,(et toujours pour ceux qui ont la meme valeur 'champ1', ceux qui ont la plus grande valeur 'champ2')
    Phase 3) suivis du reste de facon aléatoire

    Et il faudrait que les utilisateur qui ont exactement la meme valeur 'champ1' que 'champ2' soient envoyés aléatoirement dans les phases 1 et 2
    et d'une façon qui s'execute rapidement si possible car je sais que RAND() est gourmande en performances



    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <?php
    $val = 'bonjour';
    $requete = "SELECT lignes FROM table WHERE val ='$val' ORDER BY (champ1, champ2), RAND() LIMIT 10";
    ?>

    Merci d'avoir lu tout ça, si quelqu'un a une solution ^^
    Cordialement

  2. #2
    Membre Expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 59
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Billets dans le blog
    8
    Par défaut
    J'imagine que champ1 et champ2 sont des nombres ?
    Je me demande si tu ne coupes pas les cheveux en 4...

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT lignes FROM table WHERE val ='$val' ORDER BY champ1 DESC, champ2 DESC;
    Ce que tu souhaites ressemble à ça.
    Après tu ne peux pas classer des trucs, et déclasser la suite ??? Je ne comprends pas en tout cas. Teste déjà ça, et donne nous un exemple précis. Pas des explications, des chiffres rangés comme tu veux.
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  3. #3
    Membre chevronné
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2018
    Messages
    537
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Avril 2018
    Messages : 537
    Par défaut
    Merci pour ta réponse,

    Ton code marche bien, le seul truc manquant est qu'il faudrait que lorsque la colonne 'champ1' est égale a la colonne 'champ2' alors les lignes soient ordonnées aléatoirement et non par l'ordre d'ID

    Exemple (tableau) ORDER BY champ1 DESC, champ2 DESC:

    premier / 50 / 50
    deuxieme / 50 / 50
    troisieme / 50 / 50
    quatrieme / 50 / 50
    cinquieme / 40 / 30
    sixieme / 40 / 30
    septieme / 40 / 30
    huitieme / 20 /10
    neuvieme / 20 /9
    dixieme /15 / 10

    Dans ce cas la, lorsque les colonnes sont identiques il faudrait qu'elle s'affiche de facon aléatoire (exemple):
    deuxieme / 50 / 50
    quatrieme / 50 / 50
    troisieme / 50 / 50
    premier / 50 / 50
    septieme / 40 / 30
    cinquieme / 40 / 30
    sixieme / 40 / 30
    huitieme / 20 /10
    neuvieme / 20 /9
    dixieme /15 / 10

    il faudrait une condition
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if(champ1 == champ2)
    {
        ORDER BY RAND()
    }

  4. #4
    Membre Expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 59
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Billets dans le blog
    8
    Par défaut
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT champ1, champ2, id FROM la_table WHERE val ='$val' ORDER BY champ1 DESC, champ2 DESC, rand(id);
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  5. #5
    Membre chevronné
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2018
    Messages
    537
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Avril 2018
    Messages : 537
    Par défaut
    Merci mais déja essayé,
    RAND(id) affecte seulement sur les lignes d'apres avec cette requete
    Ca affecte juste a partir de la ligne 11 si on reprend l'exemple

  6. #6
    Membre Expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 59
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Billets dans le blog
    8
    Par défaut
    Tu as vraiment essayé ma requête ? Tu as vu que j'ai mis id en dernier aussi dans le select ? C'est important.
    edit : mouais, ça risque de ne pas marcher non plus. c'est costaud ton truc, finalement. Et marrant, Je vais réfléchir.
    Genre tu as un classement et tu veux présenter les ex-aequo aléatoirement...
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

Discussions similaires

  1. Plusieurs Order by rand() dans une même requête
    Par coliasso dans le forum MySQL
    Réponses: 4
    Dernier message: 13/10/2016, 10h29
  2. MySql - requête (order by) - en alternance
    Par julienleg dans le forum Requêtes
    Réponses: 11
    Dernier message: 24/04/2009, 16h57
  3. [MySQL] Union et order by
    Par Klaim dans le forum Langage SQL
    Réponses: 3
    Dernier message: 16/11/2004, 16h29
  4. [MFC] [API mySQL] Sous requêtes
    Par Guybrush113 dans le forum MFC
    Réponses: 5
    Dernier message: 29/04/2004, 16h14
  5. Réponses: 14
    Dernier message: 17/03/2003, 18h31

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