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 :

Filtre de données : tous sauf ceux qui sont blacklistés


Sujet :

PHP & Base de données

  1. #1
    Membre du Club Avatar de bodysplash007
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    154
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 154
    Points : 58
    Points
    58
    Par défaut Filtre de données : tous sauf ceux qui sont blacklistés
    Bonjour

    Voila mon petit prob, je fais un site ou je dois filtré des membres en fonction du fait qu'il sont placés dans une liste noire ou pas. Mon but est de ne plus recevoir de message de leur part.
    Donc quand j'affiche ma boite de message reçu je ne veux plus voir apparaitre les messages venant de ses personnes bloquées. Mon script marche très bien lorsque je n'ai qu'une personne dans ma liste mais quand j'en ai 2 ben il prend en compte la dernière requete

    Voici un bout de code pour mieux comprendre

    Code : 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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
     
    //Requete permettant de voir si le user a des membres dans sa liste noire//
    $sqlexclu ="SELECT * FROM listenoire WHERE idmembre=".$_SESSION['g_userid'];
    $resultexclu=mysql_query($sqlexclu,$db);
    $nombre_exclu=mysql_num_rows($resultexclu);
    // Si il n'y en a pas on refait la requete de base
    if ($nombre_exclu==0)
    {
    $sql  = "select *";
    $sql .= "  from mailbox";
    $sql .= " where toid=".$_SESSION['g_userid'];
    $sql .= " order by mailsend desc";
     
    $result = mysql_query($sql,$db);
    }
    /// Sinon on filtre les mails pour n'afficher que les mails de ceux qui ne sont pas exclus
    else
    {
       $row_exclu=mysql_fetch_object($resultexclu);
       do
       {
          $sql_filtre="SELECT * FROM mailbox ";
    	  $sql_filtre.="  WHERE fromid != ".$row_exclu->idbloque." AND toid= ".$_SESSION['g_userid'];
    	  echo "REQ-->".$sql_filtre;
     
     
       }while ($row_exclu=mysql_fetch_object($resultexclu));
      $result=mysql_query($sql_filtre,$db); 
    }
    while ($row=mysql_fetch_object($result))
      {
      PrintMailIn($row);
      }
    donc voila j'ai ma requete de filtre dans une boucle, mais lors du filtre il ne prend en compte que la derniere fois que la requete a été exécutée et moi j'aimerai qu'il tienne en compte de la dernière fois ainsi que des ultérieures

    Quelqu'un aurait il une idée????
    Il faut vivre le moment présent sans se soucier de l'avenir ni de revenir sur le passé

  2. #2
    Membre averti Avatar de deY!
    Inscrit en
    Avril 2006
    Messages
    403
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Avril 2006
    Messages : 403
    Points : 414
    Points
    414
    Par défaut
    Je comprend pas... Tu as 2 personnes dans ta liste noire ?

    Ben ça a l'air normal qu'il prenne la deuxieme.
    deY!

  3. #3
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 778
    Points
    17 778
    Par défaut
    Ne serait-ce pas plus simple de faire directement cela en une requête :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT * FROM mailbox WHERE toid = $_SESSION['g_userid'] AND fromid NOT IN(
        SELECT * FROM listenoire WHERE idmembre= $_SESSION['g_userid']
    ) ORDER BY mailsend DESC;
    Mais ce genre de requête requiert une version relativement récente de MySQL. Les deux cas seraient ici gérés par cette requête.

    Je précise que je n'ai pas testé.

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2007
    Messages : 144
    Points : 127
    Points
    127
    Par défaut
    Citation Envoyé par julp Voir le message
    Ne serait-ce pas plus simple de faire directement cela en une requête :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT * FROM mailbox WHERE toid = $_SESSION['g_userid'] AND fromid NOT IN(
        SELECT * FROM listenoire WHERE idmembre= $_SESSION['g_userid']
    ) ORDER BY mailsend DESC;
    Mais ce genre de requête requiert une version relativement récente de MySQL. Les deux cas seraient ici gérés par cette requête.

    Je précise que je n'ai pas testé.
    Petite question, niveau optimisation et rapidité, est-ce qu'il y a mieux que "NOT IN" ou on ne peut pas faire mieux quant il s'agit d'une liste noire ?

    "NOT EXISTS", jointure ou que sais-je ?

Discussions similaires

  1. Réponses: 0
    Dernier message: 12/10/2008, 15h58
  2. Réponses: 8
    Dernier message: 14/12/2007, 17h04
  3. Réponses: 1
    Dernier message: 31/10/2007, 22h43
  4. Lister tous les triggers qui sont DISABLE
    Par mpeppler dans le forum Oracle
    Réponses: 2
    Dernier message: 23/08/2006, 11h05
  5. [Plugin Firefox] Parlez avec ceux qui sont sur le même site que vous en direct
    Par ®om dans le forum La taverne du Club : Humour et divers
    Réponses: 25
    Dernier message: 15/08/2006, 12h02

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