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

Requêtes MySQL Discussion :

Condition multiples (pas soit l'une soit l'autre)


Sujet :

Requêtes MySQL

  1. #1
    Membre confirmé
    Homme Profil pro
    Technophile Web
    Inscrit en
    Mai 2007
    Messages
    930
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Technophile Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 930
    Points : 467
    Points
    467
    Par défaut Condition multiples (pas soit l'une soit l'autre)
    Bonjour @ tous,

    J'ai un petit soucis de requete mysql.
    En fait, j'ai dans une de mes table un chmap "photo" qui est rempli ou pas.
    Je souhaiterais prendre 6 enregistrements en ayant comme priorité ceux qui ont des "photo" (quand le champs n'est pas vide) tout triant ces enregistrement par ordre aléatoire (en ayant toujours en premiers ce qui ont des photos).
    J'ai à l'here actuelle la requete suivante (par exemple)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT m.photo 
     FROM MES_CONTACTS mc, MEMBER m 
    WHERE mc.ID_MEMBRE = 4026 
      AND m.ID = mc.ID_CONTACT 
    ORDER BY m.photo DESC LIMIT 6
    c'est le ORDER BY qui me permet de définir la priorité (normal)
    mais cette requete m'affiche tjrs la même chose (normal)
    je voudrais que le ceci soit aléatoire (tout en conservant l'ordre de tri)
    j'ai donc fais un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT m.photo
      FROM MES_CONTACTS mc, MEMBER m 
    WHERE mc.ID_MEMBRE = 4026 
      AND m.ID = mc.ID_CONTACT 
    ORDER BY m.photo DESC, RAND() LIMIT 6
    mais cette requete donne le même résultat que la précedente

  2. #2
    Expert confirmé Avatar de Cybher
    Homme Profil pro
    Consultant réseaux et sécurité
    Inscrit en
    Mai 2005
    Messages
    3 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Consultant réseaux et sécurité
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 281
    Points : 4 644
    Points
    4 644
    Par défaut
    Salut,

    Tu as une valeur null quand il n’y a pas de photo ?
    Si oui, tu peux essayer quelque chose dans ce genre (ce n’est peut être pas le plus efficace)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT * from 
    (SELECT m.photo , 1 as nb
      FROM MES_CONTACTS mc JOIN MEMBER m on m.ID = mc.ID_CONTACT 
    WHERE mc.ID_MEMBRE = 4026 and m.photo is not null
    UNION
    SELECT m.photo , 0 as nb
      FROM MES_CONTACTS mc JOIN MEMBER m on m.ID = mc.ID_CONTACT 
    WHERE mc.ID_MEMBRE = 4026 and m.photo is null) as test
    Order by nb, rand() limit 6

  3. #3
    Membre confirmé
    Homme Profil pro
    Technophile Web
    Inscrit en
    Mai 2007
    Messages
    930
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Technophile Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 930
    Points : 467
    Points
    467
    Par défaut
    Citation Envoyé par Cybher Voir le message
    Tu as une valeur null quand il n’y a pas de photo ?]
    non, j'ai une chaine vide

  4. #4
    Expert confirmé Avatar de Cybher
    Homme Profil pro
    Consultant réseaux et sécurité
    Inscrit en
    Mai 2005
    Messages
    3 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Consultant réseaux et sécurité
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 281
    Points : 4 644
    Points
    4 644
    Par défaut
    dans ce cas, comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT * FROM 
    (SELECT m.photo , 1 AS nb
      FROM MES_CONTACTS mc JOIN MEMBER m ON m.ID = mc.ID_CONTACT 
    WHERE mc.ID_MEMBRE = 4026 AND m.photo <> ""
    UNION
    SELECT m.photo , 0 AS nb
      FROM MES_CONTACTS mc JOIN MEMBER m ON m.ID = mc.ID_CONTACT 
    WHERE mc.ID_MEMBRE = 4026 AND m.photo = "") AS test
    ORDER BY nb, rand() LIMIT 6

  5. #5
    Membre confirmé
    Homme Profil pro
    Technophile Web
    Inscrit en
    Mai 2007
    Messages
    930
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Technophile Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 930
    Points : 467
    Points
    467
    Par défaut
    c'est pas plus optimisé de faire des jointures ?
    parce que les sous requetes, je trouve ça moyen (en terme de perf)
    non ?

Discussions similaires

  1. Réponses: 2
    Dernier message: 25/08/2007, 20h05
  2. Réponses: 4
    Dernier message: 27/05/2007, 16h06
  3. Soit la lecture, soit l'écriture,.. pas les deux!
    Par kenny49 dans le forum Langage
    Réponses: 2
    Dernier message: 06/03/2007, 01h48
  4. Calculs dans une requete avec conditions multiples
    Par Sha1966 dans le forum Access
    Réponses: 3
    Dernier message: 13/01/2006, 16h18
  5. Réponses: 3
    Dernier message: 15/06/2005, 11h15

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