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 -
Evengeline Messages postés 117 Date d'inscription Statut Membre Dernière intervention -
A voir également:
- Recherche croisée SQL
- Recherche automatique des chaînes ne fonctionne pas - Guide
- Rechercher ou entrer l'adresse mm - recherche google - Guide
- Recherche photo - Guide
- Je recherche une chanson - Guide
- Rechercher ou entrer l'adresse 4 - recherche google ✓ - Forum Windows
4 réponses
Soyons clairs pour commencer: tu veux du SQL ou du PHP ?
Paske c'est similaire sur certains points, mais différent quand même :-)
Paske c'est similaire sur certains points, mais différent quand même :-)
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 :)
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
J'ai trois champs que je veux croiser dans la base test: item, date_jour et concerne
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 )
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); ?>
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>
<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>