Recherche croisée SQL

Résolu
Evengeline Messages postés 117 Date d'inscription   Statut Membre Dernière intervention   -  
Evengeline Messages postés 117 Date d'inscription   Statut Membre Dernière intervention   -
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 11966 Date d'inscription   Statut Contributeur Dernière intervention   2 594
 
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   Statut Membre Dernière intervention   4
 
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   Statut Membre Dernière intervention   4
 
Je relance le sujet, s'il vous plait j'en ai vraiment besoin.

Merci,
cordialement
0
Evengeline Messages postés 117 Date d'inscription   Statut Membre Dernière intervention   4
 
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   Statut Membre Dernière intervention   4
 
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