Partage
  • Partager sur Facebook
  • Partager sur Twitter

SELECT multi critére

    18 mai 2022 à 18:48:52

    Bonjour.

    j'ai une table ou sont enregistré dans la même case plusieurs prénoms séparés par un espace.

    Je cherche à récupérer des donnés en utilisant un ou plusieurs critères, dans le SELECT je peu avoir une ou plusieurs variables.

    exemple: je cherche le n° id des lignes ayant mariePierre et regis dans la colonne "titre" sans tenir compte des autres variables, avec mon code je ne récupère rien, auriez vous une réponse à me donner.

     <?php

    	if(isset($_POST['mariePierre']))  $mariePierre=$_POST['mariePierre'];
    	else $mariePierre="";
    
    	if(isset($_POST['regis']))    $regis=$_POST['regis'];
    	else $regis="";
    
    	if(isset($_POST['olivier']))    $olivier=$_POST['olivier'];
    	else $olivier="";
    
    	if(isset($_POST['anneSophie']))    $anneSophie=$_POST['anneSophie'];
    	else $anneSophie="";
    
    	
    $NbrImgParLigne = 6;
    $NumImgLigne = 0;
    ?>
    
    <?php
     
    try
    	{
    		$bdd = new PDO('mysql:host=localhost;dbname=photos2022;charset=utf8', 'root', '');
    	}
    catch(Exception $e)
    	{
            die('Erreur : '.$e->getMessage());
    	}
    	
    	echo "<table border='1' width='100%'; ><tr align='center'>";
    		
        $req = $bdd->prepare('SELECT * FROM photosbis WHERE titre LIKE :mariePierre AND :regis AND :olivier AND :anneSophie ');
                                        
    		$req->execute(array(
    			':mariePierre' =>'%'.$mariePierre.'%',
    			':regis'       =>'%'.$regis.'%',
    			':olivier'     =>'%'.$olivier.'%',
    			':anneSophie'  =>'%'.$anneSophie.'%'
    			
    			
    			));
    		
    	while ($row = $req->fetch())
    	{
    		$id = $row['id'];
    		$numero = $row['numero'];
    		$annee = $row['annee'];
    		$titre = $row['titre'];
    					
    		if ($NumImgLigne>=$NbrImgParLigne)
    		 {
    			 echo "</tr><tr align='center'>";
    			 $NumImgLigne = 0;
    		 } 
    
    		 $NumImgLigne++;
    
    		echo "<td text-align='center'>";
    	
    		echo "<td text-align='center'><a href='index.php?id=$id&amp'>
    /	 N=$numero&nbsp;&nbsp;<br/><img src='/Photos2022/photos/$numero.jpg'width='50%' align='center'></a></td>";
    		
    		echo "</td>";
    } 
    	echo  "</tr></table>";
    		
    	?>
    	</div>
    	<?php
    
    	{
    	$req->closeCursor();
    	}
    	
    	?>
    </body>
    </html>
     

    • Partager sur Facebook
    • Partager sur Twitter
      18 mai 2022 à 21:17:53

      Bonjour,

      Dans titre like il te manque des % ... mais la vraie question est pourquoi as tu dans titre ces multi-critères ?

      A+

      • Partager sur Facebook
      • Partager sur Twitter
        19 mai 2022 à 11:37:56

        Je ne vois pas ou mettre les %.

        J'ai des critères différents dans titre car je n'ai pas trouvé d'autre solution, j'ai essayé de faire une table avec un critère par case 'colonne' mais j'ai le même problème, mon SELECT ne me remonte rien.

        merci 

        -
        Edité par regis62 19 mai 2022 à 11:39:13

        • Partager sur Facebook
        • Partager sur Twitter
          19 mai 2022 à 11:46:08

          Alors normalement on fait une relation avec une autre table et ensuite dans le select on fait une jointure ...

          C'est une très mauvaise méthode de mettre dans une même colonne plusieurs critères.

          Il te faut sans doute suivre des tutos pour organiser ton modèle de données et ensuite savoir faire des requêtes.

          Pour le like, Google est ton ami : https://sql.sh/cours/where/like

          A+

          -
          Edité par monkey3d 19 mai 2022 à 12:19:57

          • Partager sur Facebook
          • Partager sur Twitter
            19 mai 2022 à 11:48:59

            > WHERE titre LIKE :mariePierre AND :regis AND :olivier AND :anneSophie

            La requête est fausse, ce devrait être :

            WHERE titre LIKE :mariePierre
                AND titre LIKE :regis
                AND titre LIKE :olivier
                AND titre LIKE :anneSophie
            

            J'imagine qu'avec la requête de départ, la cast en int de '%...' donne 0 soit FALSE donc la clause WHERE en est fausse et la requête ne peut que rien renvoyer.

            PS : je plussoie mon VDD, les conception et "modélisation" sont loin d'être idéales

            -
            Edité par julp 19 mai 2022 à 11:58:05

            • Partager sur Facebook
            • Partager sur Twitter
              19 mai 2022 à 11:50:56

              Merci.

              Je regarde ce soir, je n'ai suivi aucune formation, je cherche sur internet et dans les livres.

              encore merci.

              Je vous remercie pour votre aide et vos informations, j'ai trouvé une solution qui n'est pas terrible si je suis vos dire. Je ne suis pas un professionnel et j'ai 61 ans quand même.

              je vous remercie encore.

              $req = $bdd->prepare("SELECT * FROM photosbis WHERE titre LIKE 
                  	'%$mariePierre%' AND titre LIKE '%$regis%' AND titre LIKE '%$olivier%'	AND titre LIKE '%$anneSophie%'");
              
                                                     
              		$req->execute(array(
              			'mariePierre' =>$mariePierre,
              			'regis'       =>$regis,
              			'olivier'     =>$olivier,
              			'anneSophie'  =>$anneSophie
              			));

              -
              Edité par regis62 19 mai 2022 à 20:58:14

              • Partager sur Facebook
              • Partager sur Twitter
                26 mai 2022 à 19:29:46

                Bonjour, je reviens vers vous car le système que j'ai essayé, ne fonctionne pas correctement, réponse aléatoire pas stable et maintenant in ne fonctionne plus.

                J'ai donc changé de système

                Page1

                <!doctype html>
                <html>
                <head>
                <meta charset="utf-8">
                <title>FranceSelect</title>
                <link  rel="stylesheet" media="screen" type="text/css" title="Design" href="">
                </head>
                <body>
                	<style>
                    body { background-color: beige;  }
                  </style>
                <header>
                </header>
                					
                <form method="POST" action="cherchePhotos_1Essai.php">
                <table align="center">
                
                	<tr>
                		<td>
                			<table border="1" align="center">
                	<tr>
                		<td align="center">Famille</td>
                		
                		
                	</tr>
                	<tr>
                		<td>
                			<input type="text" id="numero" name="numero" value=""/>  
                         	<label for="numero">Numéro</label> <br>
                
                			<input type="checkbox" id="pere" name="pere" value="Pére"/>  
                         	<label for="pere">Pére</label> <br>
                              
                            <input type="checkbox" id="mére" name="mére" value="Mére"/>  
                            <label for="mere">Mére</label> <br> 
                           
                            <input type="checkbox" id="garcon" name="garcon" value="Garçon"/> 
                       		<label for="garcon">Garçon</label>   <br>
                            
                			<input type="checkbox" id="fille" name="fille" value="Fille"/>  
                       		<label for="fille">Fille</label> <br>
                
                       		<input type="checkbox" id="bebe" name="bebe" value="Bébé"/>  
                       		<label for="bebe">Bébé</label> <br>
                
                       		     
                		</td>
                	</tr>
                </table>
                <table align="center">
                	<td align="center">
                  <input type="submit" value="Envoyer" name="Envoyer" />
                </td>
                </table>
                </form>
                
                </body>
                </html>

                Page 2

                <?php
                
                	if(isset($_POST['numero']))  $numero=$_POST['numero'];
                	else $numero="";
                
                	if(isset($_POST['pere']))  $pere=$_POST['pere'];
                	else $pere="";
                	
                	if(isset($_POST['mere']))    $mere=$_POST['mere'];
                	else $mere="";
                
                	if(isset($_POST['garcon']))    $garcon=$_POST['garcon'];
                	else $garcon="";
                
                	if(isset($_POST['fille']))    $fille=$_POST['fille'];
                	else $fille="";
                
                	if(isset($_POST['bebe']))    $bebe=$_POST['bebe'];
                	else $bebe="";
                
                	
                $NbrImgParLigne = 6;
                $NumImgLigne = 0;
                ?>
                
                <?php
                 
                try
                	{
                		$bdd = new PDO('mysql:host=localhost;dbname=photos2022;charset=utf8', 'root', '');
                	}
                catch(Exception $e)
                	{
                        die('Erreur : '.$e->getMessage());
                	}
                	
                	echo "<table border='1' width='100%'; ><tr align='center'>";
                		
                	$req = $bdd->prepare("SELECT * FROM photos2 WHERE numero = :numero AND pere = :pere AND mere = :mere AND garcon = :garcon AND fille= :fille AND bebe = :bebe ");
                
                    $req->execute(array(
                    		'numero' =>$numero,
                    		'pere'   =>$pere,
                    		'mere'   =>$mere,
                    		'garcon' =>$garcon,
                    		'fille'  =>$fille, 
                    		'bebe'   =>$bebe
                
                		));
                
                		
                	while ($row = $req->fetch())
                	{
                		$id = $row['id'];
                							
                		if ($NumImgLigne>=$NbrImgParLigne)
                		 {
                			 echo "</tr><tr align='center'>";
                			 $NumImgLigne = 0;
                		 } 
                
                		 $NumImgLigne++;
                
                		echo "<td text-align='center'>";
                	
                		echo "<td text-align='center'><a href='index.php?id=$id&amp'>
                /	 ;<br/><img src='/Photos2022/photos/$id.jpg'width='50%' align='center'></a></td>";
                		
                		echo "</td>";
                } 
                	echo  "</tr></table>";
                		
                	?>
                	</div>
                	<?php
                
                	{
                	$req->closeCursor();
                	}
                	
                	?>
                </body>
                </html>
                Le but de l'application est de sélectionner une photo comportant une ou plusieurs personnes,
                Problème quand le sélectionne Pére et Mére "par exemple" je devrais avoir trois réponses mais je ne reçois rien car les autres variables sont vides,
                et quand mon SELECT regarde dans la table il est possible qu'il y ai une valeur.
                donc j'ai essayé de détruire les variables vides avant le SELECT mais je n'arrive pas à gérer le SELECT avec ses variables détruites.
                Auriez vous un conseil ou une idée pour mon problème.
                PS: j'ai utilisé UNSET pour détruire les variables vides mais je suis prêt à essayer tout autre procédure, n'étant pas très fort en php.
                merci d'avance.

                -
                Edité par regis62 27 mai 2022 à 12:19:44

                • Partager sur Facebook
                • Partager sur Twitter

                SELECT multi critére

                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                • Editeur
                • Markdown