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 :

requête WHERE, OR ? [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre éclairé Avatar de Angelik
    Profil pro
    Inscrit en
    Août 2006
    Messages
    253
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 253
    Par défaut requête WHERE, OR ?
    Bonsoir tout le monde,

    J'ai un petit problème avec une requête (ci-suit) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $select = mysql_query("SELECT sbbproduit.pseudo,sbbproduit.id,sbbproduit.spec,sbbproduit.photoarticle,sbbproduit.url,sbbproduit.affichages,sbbparrain.parrain, count(*) AS nombre FROM sbbproduit JOIN sbbparrain WHERE sbbproduit.pseudo = sbbparrain.parrain GROUP BY sbbproduit.id ORDER BY nombre desc LIMIT ". $premierMessageAafficher . ', ' . $nombreDeMessagesParPage);
    	$row = mysql_query($select);
        $nombre = $row['nombre'];
    J'aimerais afficher le nombre de filleuls par membres (nombre) mais aussi le nombre de hits par membre (sbbproduit.affichages). Pour se faire, je rajoute à ma requête ce qui suit en gras :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $select = mysql_query("SELECT sbbproduit.pseudo,sbbproduit.id,sbbproduit.spec,sbbproduit.photoarticle,sbbproduit.urlblog,sbbproduit.affichages,sbbparrain.parrain, count(*) AS nombre FROM sbbproduit JOIN sbbparrain WHERE sbbproduit.pseudo = sbbparrain.parrain OR sbbproduit.affichages > 0 GROUP BY sbbproduit.id ORDER BY nombre desc LIMIT ". $premierMessageAafficher . ', ' . $nombreDeMessagesParPage);
    	$row = mysql_query($select);
        $nombre = $row['nombre'];
    Or, à partir du moment où sbbproduit.affichages > 0, le nombre de filleuls par membre [où sbbproduit.pseudo = sbbparrain.parrain] est égal au nombre total des membres inscrits dans la base sbbproduit au lieu de compter les nombre de filleuls où sbbproduit.pseudo = sbbparrain.parrain ...

    Exemple :

    Si total des membres enregistrés est égal à 200, j'ai :

    Fanny : 3 filleuls, 0 hit
    Emilie : 2 filleuls, 0 hit
    Pouchounette : 200 filleuls, 1 hit (normalement 1 filleul )
    Angelik : 200 filleuls, 10 hits (normalement 1 filleul )
    Sarah : 200 filleuls, 50 hits (normalement 1 filleul )


    Voilà, j'ai essayé de faire le plus clair possible ...
    +++

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    38
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 38
    Par défaut
    Essaye ça (j'ai ajouté des parenthèses) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $select = mysql_query("SELECT sbbproduit.pseudo,sbbproduit.id,sbbproduit.spec,sbbproduit.photoarticle,sbbproduit.urlblog,sbbproduit.affichages,sbbparrain.parrain, count(*) AS nombre FROM sbbproduit JOIN sbbparrain WHERE (sbbproduit.pseudo = sbbparrain.parrain) OR (sbbproduit.affichages > 0) GROUP BY sbbproduit.id ORDER BY nombre desc LIMIT ". $premierMessageAafficher . ', ' . $nombreDeMessagesParPage);
    	$row = mysql_query($select);
        $nombre = $row['nombre'];

  3. #3
    Membre éclairé Avatar de Angelik
    Profil pro
    Inscrit en
    Août 2006
    Messages
    253
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 253
    Par défaut
    toujours pas ... je retourne mon code dans tous les sens depuis cet après-midi mais dès que sbbproduit.affichage > 0 , $nombre = mon nombre total de membres

    Par contre, si sbbproduit.affichages = 0, j'ai le nombre exact de filleuls par membre où sbbproduit.pseudo = sbbparrain.parrain

    J'ai espérer pour les parenthèses

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 22
    Par défaut essaie avec un AND
    au lieu de OR

  5. #5
    Membre éclairé Avatar de Angelik
    Profil pro
    Inscrit en
    Août 2006
    Messages
    253
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 253
    Par défaut
    Avec un and ça marche sauf que la requête me retourne seulement les membres qui ont un filleuls et au moins 1 affichage alors que j'aimerais faire apparaître tous les membres ayant sbbproduit.affichages > 1 sans pour autant que ces derniers aient déjà un filleul...tu vois ?

  6. #6
    Membre éclairé Avatar de Angelik
    Profil pro
    Inscrit en
    Août 2006
    Messages
    253
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 253
    Par défaut
    Voici la structure de mes 2 tables :

    table sbbproduit :

    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
     
      `id` int(11) NOT NULL,
      `sid` int(11) NOT NULL default '0',
      `pseudo` varchar(80) NOT NULL default '',
      `nom` varchar(80) NOT NULL default '',
      `prenom` varchar(80) NOT NULL default '',
      `spec` text NOT NULL,
      `url` varchar(150) NOT NULL default '',
      `email` varchar(80) NOT NULL default '',
      `photoarticle` text NOT NULL,
      `lecteurarticle` text NOT NULL,
      `parrain` varchar(80) NOT NULL default '',
      `affichages` tinyint(4) NOT NULL default '0',
      `affich` tinyint(4) NOT NULL default '0',
      `cat` int(11) NOT NULL,
      `newsletter` varchar(4) NOT NULL,
      `date` datetime NOT NULL default '0000-00-00 00:00:00',

    et la structure de ma table sbbparrain :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
      `id` int(11) NOT NULL auto_increment,
      `parrain` varchar(80) NOT NULL default '',


  7. #7
    Membre chevronné Avatar de dj-julio
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    745
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Décembre 2005
    Messages : 745
    Par défaut
    Je pense que ton analyse n'est pas très bonne.

    je te conseille déjà de bien nommer tes champs pour qu'ils soient facilement compréhensibles, ainsi que les tables

    A par cela, voila ce que je te propose :

    sbbproduit
    -----------
    id_prod uit
    pseudo
    id_parrain
    ...

    sbbparrain
    ----------
    id_parrain
    id_produit

    Explication :

    1 personne qui s'inscrit va dans la table sbbproduit.
    Le jour ou cette personne devient parrain,
    dans la table sbbparrain tu crées l'enregistrement suivant

    id_parrain = AutoIncrement donc tu ne t'en occupes pas pour le moment
    id_produit = le numéro id de la personne dans la table sbbproduit.

    Le jour où une personne devient filleul
    Alors, dans la table sbbproduit,
    tu inscris le numéro de son parrain (id_parrain.sbbparrain) dans le champsbbproduit.id_parrain

    Je pense que ça peut résoudre ton problème.

    Ensuite la requête on verra.
    Dis moi déjà si ça convient mieux.

  8. #8
    Modérateur
    Avatar de Bisûnûrs
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2004
    Messages
    9 931
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2004
    Messages : 9 931
    Par défaut
    Et comme ça :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT /*ta selection*/
    FROM sbbproduit pd LEFT JOIN sbbparrain pa
    ON pd.pseudo = pa.parrain
    WHERE pd.affichages > 0
    /*reste de ta requête*/

    Aide sur le LEFT JOIN : http://www.w3schools.com/sql/sql_join.asp

  9. #9
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Angelik
    Bonsoir tout le monde,

    J'ai un petit problème avec une requête (ci-suit) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $select = mysql_query("SELECT sbbproduit.pseudo,sbbproduit.id,sbbproduit.spec,sbbproduit.photoarticle,sbbproduit.url,sbbproduit.affichages,sbbparrain.parrain, count(*) AS nombre FROM sbbproduit JOIN sbbparrain WHERE sbbproduit.pseudo = sbbparrain.parrain GROUP BY sbbproduit.id ORDER BY nombre desc LIMIT ". $premierMessageAafficher . ', ' . $nombreDeMessagesParPage);
    	$row = mysql_query($select);
        $nombre = $row['nombre'];
    J'aimerais afficher le nombre de filleuls par membres (nombre) mais aussi le nombre de hits par membre (sbbproduit.affichages). Pour se faire, je rajoute à ma requête ce qui suit en gras :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $select = mysql_query("SELECT sbbproduit.pseudo,sbbproduit.id,sbbproduit.spec,sbbproduit.photoarticle,sbbproduit.urlblog,sbbproduit.affichages,sbbparrain.parrain, count(*) AS nombre FROM sbbproduit JOIN sbbparrain WHERE sbbproduit.pseudo = sbbparrain.parrain OR sbbproduit.affichages > 0 GROUP BY sbbproduit.id ORDER BY nombre desc LIMIT ". $premierMessageAafficher . ', ' . $nombreDeMessagesParPage);
    	$row = mysql_query($select);
        $nombre = $row['nombre'];
    Or, à partir du moment où sbbproduit.affichages > 0, le nombre de filleuls par membre [où sbbproduit.pseudo = sbbparrain.parrain] est égal au nombre total des membres inscrits dans la base sbbproduit au lieu de compter les nombre de filleuls où sbbproduit.pseudo = sbbparrain.parrain ...

    Exemple :

    Si total des membres enregistrés est égal à 200, j'ai :

    Fanny : 3 filleuls, 0 hit
    Emilie : 2 filleuls, 0 hit
    Pouchounette : 200 filleuls, 1 hit (normalement 1 filleul )
    Angelik : 200 filleuls, 10 hits (normalement 1 filleul )
    Sarah : 200 filleuls, 50 hits (normalement 1 filleul )


    Voilà, j'ai essayé de faire le plus clair possible ...
    +++
    ceci devrait marcher:

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT p1.*,count(p2.id) 'filleul' FROM sbbproduit p1
    left join sbbproduit p2 on  p1.pseudo=p2.parrain
    group by p1.id

    je crois que ta structure de table n'est pas très bonne..
    tu devrais remplacer parrain par ID_PARRAIN int

    et te débarrasser de ta 2ème table completement.



    si tu le fais la requete deviendrait alors:

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT p1.*,count(p2.id) 'filleul' FROM sbbproduit p1
    left join sbbproduit p2 on   p1.id=p2.Id_Parrain
    group by p1.id

  10. #10
    Membre éclairé Avatar de Angelik
    Profil pro
    Inscrit en
    Août 2006
    Messages
    253
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 253
    Par défaut
    Coucou !

    Merci de vos posts... J'ai revu la structure de mon code qui était effectivement pas très bonne... Le post de bisunurs m'a permis de résoudre mon problème

    @bientôt ++

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

Discussions similaires

  1. [MySQL] problème requête WHERE
    Par Angelik dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 13/02/2008, 10h41
  2. [MySQL] Requête WHERE
    Par joker vb dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 15/11/2007, 08h54
  3. requête where entre deux chaines de caractères
    Par soltani1 dans le forum Développement
    Réponses: 2
    Dernier message: 04/10/2007, 09h34
  4. requête where entre deux chaines de caractères
    Par soltani1 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 04/10/2007, 09h34
  5. Bonne requête WHERE
    Par Anduriel dans le forum Langage
    Réponses: 2
    Dernier message: 26/06/2006, 17h47

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