Recherche croisée SQL

Résolu/Fermé
Evengeline Messages postés 117 Date d'inscription mercredi 20 octobre 2010 Statut Membre Dernière intervention 21 octobre 2016 - 25 juil. 2011 à 10:06
Evengeline Messages postés 117 Date d'inscription mercredi 20 octobre 2010 Statut Membre Dernière intervention 21 octobre 2016 - 20 mars 2012 à 08:39
Bonjour,



J'aimerais faire une recherche croisée en SQL, je ne trouve pas trop d'infos là dessus sur le net, si il y en a d'entre vous qui peuvent m'éclairer ou me donner des liens, je vous en serais reconnaissante.

Alors voilà J'ai donc deux cases vides où l'on rentrera le prenom, le domaine ou la signature et deux autres dont on peut choisir entre "concerne, domaine et signature".


[________] [_concerne_\/]

[________] [_domaine_\/]


[_Afficher_]


Je voudrais faire une fonction SQL du genre:

$select = 'IF "case2" = concerne AND "case4" = domaine
SELECT prenom FROM user WHERE prenom= "$prenom saisi";
UNION
SELECT domaine FROM item where domaine = "$domaine saisi" ';
	
$result = mysql_query($select,$link) or die ('Erreur : '.mysql_error());
$total = mysql_num_rows($result);



Bien sur c'est du chinois, comment le traduire en bon vrai SQL?

J'espère que c'est assez clair,
Merci d'avance
Cordialement

4 réponses

Bruce Willix Messages postés 11968 Date d'inscription mardi 24 mai 2011 Statut Contributeur Dernière intervention 12 juin 2018 2 587
25 juil. 2011 à 10:10
Soyons clairs pour commencer: tu veux du SQL ou du PHP ?

Paske c'est similaire sur certains points, mais différent quand même :-)

0
Evengeline Messages postés 117 Date d'inscription mercredi 20 octobre 2010 Statut Membre Dernière intervention 21 octobre 2016 4
25 juil. 2011 à 10:18
Je préférerais du SQL puisque j'ai une base de données assez conséquente derrière, mais si tu connais la solution qu'en php je prend aussi volontier :)
0
Evengeline Messages postés 117 Date d'inscription mercredi 20 octobre 2010 Statut Membre Dernière intervention 21 octobre 2016 4
26 juil. 2011 à 08:41
Je relance le sujet, s'il vous plait j'en ai vraiment besoin.

Merci,
cordialement
0
Evengeline Messages postés 117 Date d'inscription mercredi 20 octobre 2010 Statut Membre Dernière intervention 21 octobre 2016 4
Modifié par Evengeline le 20/03/2012 à 09:06
Je suis retombé sur ce vieux post, je me réponds à moi-même au bout d'un an, j'ai depuis longtemps trouvé:



Voici la page de "AfficheCroiseTest.php" qui affiche les données en fonction des souhaits de l'utilisateur

<?php 
//appel de la page de connexion à la base de données  
 include ('conf.php');


J'ai trois champs que je veux croiser dans la base test: item, date_jour et concerne

 $item = $_POST['item'];  
 $date_jour= $_POST['date_jour'];   
 $concerne= $_POST['concerne'];   
 //on regarde si les cases sont vides ou remplies, (il faut toujours penser que l'utilisateur ne remplis pas obligatoirement toutes les cases)  

 if ($item=="" AND $date_jour=="")  
 {  
 $select = "SELECT * FROM test WHERE concerne='$concerne' ORDER BY date_jour DESC";  
 }  
  else if ($concerne=="" AND $date_jour=="")  
  {  
  $select = "SELECT * FROM test WHERE item='$item' ORDER BY date_jour DESC";  
  }  
  else if ($concerne=="" AND $item=="")  
  {  
  $select = "SELECT * FROM test WHERE date_jour='$date_jour' ORDER BY date_jour DESC";  
  }  
   
    
  else if ($concerne=="")  
  {  
  $select = "SELECT * FROM test WHERE item='$item' AND date_jour='$date_jour' ORDER BY date_jour DESC";  
  }  
  else if ($item=="")  
  {  
  $select = "SELECT * FROM test WHERE concerne='$concerne' AND date_jour='$date_jour' ORDER BY date_jour DESC";  
  }  
  else if ($date_jour=="")  
  {  
  $select = "SELECT * FROM test WHERE concerne='$concerne' AND item='$item' ORDER BY date_jour DESC";  
  }  



  else if ($concerne=="" AND $item=="" AND $date_jour=="")  
  {  
  $select = "SELECT * FROM test ORDER BY date_jour DESC";  
  }  
   
 else  
 {  
 $select = "SELECT * FROM test WHERE concerne='$concerne' AND item='$item' AND date_jour='$date_jour' ORDER BY date_jour DESC";  
 }  

        //on récupere le résultat  
 $result = mysql_query($select,$link) or die ('Erreur : '.mysql_error());  
 $total = mysql_num_rows($result);


Plus vous aurez de champs à croiser, plus il faudra penser aux cases qui peuvent rester vides.



L'affichage dans un tableau: ( vous pouvez très bien le faire en html )


// si on a récupéré un résultat on l'affiche.  
 if($total) {  
  // debut du tableau  
  echo '<table bgcolor="#FFFFFF">'."\n";  
   // première ligne on affiche les données dans 2 colonnes  
   echo '<tr>';  
   echo '<td bgcolor="#0099aa"><b><u>date jour</u></b></td>';  
   echo '<td bgcolor="#0099aa"><b><u>concerne</u></b></td>';  
    echo '<td bgcolor="#0099aa"><b><u>item</u></b></td>';  
   echo '<td bgcolor="#0099aa"><b><u>libelle</u></b></td>';  
    echo '<td bgcolor="#0099aa"><b><u>signature</u></b></td>' ;  
    echo '</tr>'."\n";  
  // lecture et affichage des résultats sur 2 colonnes, 1 résultat par ligne.      
  while($row = mysql_fetch_array($result)) {  
   echo '<tr>';  
   echo '<td bgcolor="#ADD8E6">'.$row["date_jour"].'</td>';  
   echo '<td bgcolor="#ADD8E6">'.$row["concerne"].'</td>';  
    echo '<td bgcolor="#ADD8E6">'.$row["item"].'</td>';  
   echo '<td bgcolor="#ADD8E6">'.$row["libelle"].'</td>';  
    echo '<td bgcolor="#ADD8E6">'.$row["signature"].'</td>';  
    echo '</tr>'."\n";  
  }  
  echo '</table>'."\n";  
  // fin du tableau.  
 }  
 else echo 'Pas d\'enregistrements dans cette table...';  

 // on libère le résultat  
 mysql_free_result($result);  

?> 
0
Evengeline Messages postés 117 Date d'inscription mercredi 20 octobre 2010 Statut Membre Dernière intervention 21 octobre 2016 4
Modifié par Evengeline le 20/03/2012 à 09:07
Voici aussi mon formulaire où l'utilisateur choisi ses champs ( pour ma part, j'ai mis des champs select, car je voulais qu'il puisse choisir, mais vous pouvez très bien mettre de simples input )


<form method="post" name="recherche" action="AfficheCroiseTest.php">
<?php
require 'conf.php';
?>


<h1> Utilisateur:</h1>
<select name= "concerne">
<option value=""></option>
<?php
$SQL = "SELECT DISTINCT prenom, nom FROM utilisateur
WHERE groupe = 'adulte' ORDER BY prenom";
$res = mysql_query($SQL);
while($val=mysql_fetch_array($res))
{
echo "<option value=".$val["prenom"]." ".$val["nom"].">".$val["prenom"]." ".$val["nom"]."</option>\n";
}
?>
</select>


<h1> Domaine :</h1>
<select name= "item">
<option value=""></option>
<?php
$SQL = "SELECT DISTINCT * FROM item ORDER BY item";
$res = mysql_query($SQL);
while($val=mysql_fetch_array($res))
{
echo "<option value=".$val["item"].">".$val["item"]."</option>\n";
}
?>
</select>


<h1> Date : (du type jj-mm-aaaa) </h1>
<div>
<input type="text" name="date_jour" style="cursor: text" value= ""/>
</div>


<input type="submit" value="Afficher" alt="Lancer la recherche!" />


</form>
0