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 :

limitation du where [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre actif

    Homme Profil pro
    Webmaster, Réalisateur Vidéo, Chef de projet Web documentaire
    Inscrit en
    Juillet 2006
    Messages
    404
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Webmaster, Réalisateur Vidéo, Chef de projet Web documentaire
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2006
    Messages : 404
    Points : 241
    Points
    241
    Par défaut limitation du where
    bonjour

    j'ai une table ou je souhaite limiter l'affichage des champs a un type de clients différents défini par une variable.
    je fait une recherche globale sur toute la base a partir d'un mot envoyé en requête mais je veux qu'en retour je n'ai que les fiches correspondantes à ce client.
    je ne sais pas si c'est très clair.
    Un client A fait une recherche partout pour voir si le mot clef envoyé retourne quelque chose mais il ne doit voir que les enregistrements contenant client A, tout en cherchant son mot clef dans toute la base il faudrait que je fasse comme un limit client=$client.
    si j'ai bien compris je ne pense pas que limit soit fait pour ça, est ce que having pourrait fonctionner?

    ici je lance la recherche globale
    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
    IF ( $_SESSION['typerecherche']=='global'){
     
      // req�te
     
      $masterech=" WHERE
      master='$recherche' OR
      date LIKE '%" . $recherche . "%' OR
      duration='$recherche' OR
     lieu='$recherche' 
      OR titre1 COLLATE utf8_unicode_ci LIKE '%" . $recherche . "%' 
      OR titre2 COLLATE utf8_unicode_ci LIKE '%" . $recherche . "%' 
      OR prod COLLATE utf8_unicode_ci LIKE '%" . $recherche . "%' 
      OR realis COLLATE utf8_unicode_ci LIKE '%" . $recherche . "%' 
      OR monteur COLLATE utf8_unicode_ci LIKE '%" . $recherche . "%' 
      OR truq COLLATE utf8_unicode_ci LIKE '%" . $recherche . "%' 
      OR compo COLLATE utf8_unicode_ci LIKE '%" . $recherche . "%' 
      OR musiq COLLATE utf8_unicode_ci LIKE '%" . $recherche . "%' 
      OR contact COLLATE utf8_unicode_ci LIKE '%" . $recherche . "%' 
      OR speak1 COLLATE utf8_unicode_ci LIKE '%" . $recherche . "%' 
      OR speak2 COLLATE utf8_unicode_ci LIKE '%" . $recherche . "%'
      OR v1 COLLATE utf8_unicode_ci LIKE '%" . $recherche . "%' 
      OR v2 COLLATE utf8_unicode_ci LIKE '%" . $recherche . "%' 
      OR formator COLLATE utf8_unicode_ci LIKE '%" . $recherche . "%' 
      OR standard COLLATE utf8_unicode_ci LIKE '%" .$recherche . "%' 
      OR contenu COLLATE utf8_unicode_ci LIKE '%" . $recherche . "%' 
      OR observation COLLATE utf8_unicode_ci LIKE '%" . $recherche . "%'";
     }
    ici il me faudrait donc limiter la requête à la variable $client
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $sqlafichmaster= "SELECT * FROM  films  $masterech  ORDER BY master DESC " ;
     
    $resultat1 = mysql_query($sqlafichmaster) or die(mysql_error());
    while ($master =mysql_fetch_array ($resultat1)){

  2. #2
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut,

    Pas de having, ni limit juste client = $id_client AND (2nd filtre).
    Par exemple comme ça :
    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
    <?php
     
    if ($_SESSION['typerecherche'] === 'global') {
     
       $mysql_value = mysql_real_escape_string($recherche);
     
       $filter =
          function($field) use ($mysql_value)
          {
             return "$field COLLATE utf8_unicode_ci LIKE '%$mysql_value%'";
          };
     
       $where = array_map($filter,
          array(
             'titre1', 'titre2', 'prod', 'realis', 'monteur', 'truq',
             'compo', 'musiq', 'contact', 'speak1', 'speak2', 'v1', 'v2',
             'formator', 'standard', 'contenu', 'observation'
          )
       );
     
       $where[] = "master = '$mysql_value'";
       $where[] = "date LIKE '%$mysql_value%'";
       $where[] = "duration = '$mysql_value'";
       $where[] = "lieu = '$mysql_value'";
     
       $sql_where = "client = $id_client AND (".implode(' OR ', $where).")";
     
    }
    ?>

  3. #3
    Membre actif

    Homme Profil pro
    Webmaster, Réalisateur Vidéo, Chef de projet Web documentaire
    Inscrit en
    Juillet 2006
    Messages
    404
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Webmaster, Réalisateur Vidéo, Chef de projet Web documentaire
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2006
    Messages : 404
    Points : 241
    Points
    241
    Par défaut
    ok merci
    j'vais essayé un AND mais sans les parenthèses, je n'avais pas pensé à cette astuce, qui fit toute la différence.

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

Discussions similaires

  1. [AC-2007] Limite condition where (255 caractères)
    Par amelyfred dans le forum IHM
    Réponses: 2
    Dernier message: 22/11/2013, 15h10
  2. Where in mais limité
    Par angeloo dans le forum Requêtes
    Réponses: 3
    Dernier message: 06/09/2010, 08h55
  3. Réponses: 7
    Dernier message: 24/04/2007, 17h40
  4. limite de select * from where titi in (,) limite à 1000 char
    Par chimiotheque dans le forum Langage SQL
    Réponses: 4
    Dernier message: 18/01/2007, 17h35
  5. Réponses: 5
    Dernier message: 10/07/2006, 12h05

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