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 :

Comment afficher les résultats d'une requête en "dé-groupant" ?


Sujet :

PHP & Base de données

  1. #1
    Membre confirmé
    Inscrit en
    Mai 2011
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Mai 2011
    Messages : 63
    Par défaut Comment afficher les résultats d'une requête en "dé-groupant" ?
    Bonjour à tous,

    J'ai une base de donnée avec une table "username" comme ceci :

    username | color
    mathieu | rouge
    jérome | rouge
    Jérémy | jaune
    Sandra | rouge
    Hector | rouge
    Basile | jaune

    Comment je pourrais faire ma requête php mysql pour afficher "rouge" 1 fois sur 2 ?
    Résultat attendu :

    username | color
    mathieu | rouge
    Jérémy | jaune
    jérome | rouge
    Basile | jaune
    Sandra | rouge
    Hector | rouge

    ...

    Merci d'avance de vos idées éclairées

  2. #2
    Membre Expert
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Par défaut
    Comme ça.

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
    SELECT * FROM (
        select prenom, couleur, @C:=@C+10 as position from (select @C:=0) as _ROWS 
        inner join (select prenom, couleur from `prencoul` where couleur = 'rouge' order by prenom) A on 1=1
        UNION
        select prenom, couleur, @D:=@D+10 as position from (select @D:=1) as _ROWS 
        inner join (select prenom, couleur from `prencoul` where couleur <> 'rouge' order by prenom) B on 1=1
    ) C
    ORDER BY position

    Nom : Capture20190120_001.JPG
Affichages : 81
Taille : 20,5 Ko

  3. #3
    Membre confirmé
    Inscrit en
    Mai 2011
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Mai 2011
    Messages : 63
    Par défaut
    Merci Badaze pour ta réponse rapide, claire, nette et précise.
    ça doit être plus facile pour toi qui aime les calculatrices haha (sympa ton site)

    Malheureusement je ne suis pas bill gates et ma requête est déjà troooooop compliqué pour y ajouter des "inner join".
    Le moindre inner ou la moindre parenthèse que j'ajoute et ça ne marche plus !

    voici ma requête :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    SELECT
    post_id,
    username,
    post_title,
    description,
    post_tags,
    post_cats,
    color,
    MATCH(username) AGAINST (+(:keyword) IN BOOLEAN MODE)  AS  score_username,
    MATCH(post_title) AGAINST (+(:keyword) IN BOOLEAN MODE)  AS  score_title,
    MATCH(description) AGAINST (+(:keyword) IN BOOLEAN MODE) AS score_description,
    MATCH(post_tags) AGAINST (+(:keyword) IN BOOLEAN MODE) AS score_tags,
    MATCH(post_cats) AGAINST (+(:keyword) IN BOOLEAN MODE) AS score_cats
    FROM topics
    WHERE
    MATCH(username) AGAINST (+(:keyword) IN BOOLEAN MODE) OR
    MATCH(post_title) AGAINST (+(:keyword) IN BOOLEAN MODE) OR
    MATCH(description) AGAINST (+(:keyword) IN BOOLEAN MODE)OR
    MATCH(post_tags) AGAINST (+(:keyword) IN BOOLEAN MODE)OR
    MATCH(post_cats) AGAINST (+(:keyword) IN BOOLEAN MODE)
    ORDER BY num_rep DESC, (score_username+score_title*0.5+score_description*0.4+score_tags*0.3+score_cats*0.2) DESC

    il n'y a pas une façon plus simple (peut être en php ou avec 2 requêtes) pour afficher les couleurs de façon "non groupées" ?
    Une fois rouge, une fois verte, une fois jaune.
    Voir même définir un quota (2 fois rouge 1fois verte, 1 fois jaune)
    Il n'existe pas un "ungroup" dans mysql ?

  4. #4
    Membre Expert
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Par défaut
    Après tu peux toujours le faire en php.

    Tu fais une boucle dans laquelle tu mets tes données dans un tableau.
    Tu incrémentes un compteur impair pour les lignes qui ont rouge et un pair pour les autres. Ces compteurs seront les indices du tableau.
    Après la boucle tu fais un ksort afin de trier le tableau dans l’ordre des valeurs de clés. Puis une autre boucle afin d’afficher le résultat.

  5. #5
    Membre confirmé
    Inscrit en
    Mai 2011
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Mai 2011
    Messages : 63
    Par défaut
    Bonne idée ! je vais essayé ça !... (y a plus qu'à chercher comment on fait ce charabia, mais l'idée me semble la meilleure)

Discussions similaires

  1. Réponses: 2
    Dernier message: 07/02/2012, 09h17
  2. Afficher les résultats d'une requête ligne après ligne
    Par ThunderBolt_ dans le forum VBA Access
    Réponses: 9
    Dernier message: 02/08/2007, 13h28
  3. Réponses: 13
    Dernier message: 26/07/2007, 08h50
  4. [SQL] Afficher les résultats d'une requête sur plusieurs pages
    Par mealtone dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 07/09/2006, 13h20
  5. Réponses: 11
    Dernier message: 20/06/2006, 11h10

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