Recherche simultanée sur plusieurs table [Résolu]

Signaler
Messages postés
17
Date d'inscription
mercredi 22 mars 2006
Statut
Membre
Dernière intervention
24 avril 2011
-
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
-
J'ai ecrit un petit script qui permet rechercher des données dans une table X à partir d'un mot clef entre dans un formulaire et les resultat s'affichents 10 par 10.
J'ai essai d'etendre ces recherche sur 2 autres tables Y, Z de la BD ; mais j'ai un leger bleme qui est le suivant:
Les resultats trouvés dans la 1ere table X s'affichent par tranche de 10 sur une page et est immediatement suivi de tous les resultats trouves dans les 2 autres tables sur les pages pages suivant on ne voit que les resultats de la table X.
Comment faire pour afficher les resutats par tranche de 10 de la table Y apres ceux de la table X

//////voir le script(recherche sur une seul table)
<?php
[file://moteur file://moteur] de recherche de l'annuaire


include("param_connection.php"); [file://variables file://variables] de l'annuaire
include("fonctions.php"); [file://fonctions file://fonctions] de l'annuaire


$mots = isset($_REQUEST['mots']) ? $_REQUEST['mots'] : '';
$mots = trim($mots);
$page = isset($_GET['page']) ? (int)$_GET['page'] : 0;
if($page < 0)
exit;


$booleen = isset($_REQUEST['booleen']) ? $_REQUEST['booleen'] : '';
if(empty($booleen) or $booleen != "OR")
$booleen = "AND";


$resultat_par_page= isset($_REQUEST['resultat_par_page']) ? (int)$_REQUEST['resultat_par_page'] : 0;
if($resultat_par_page<= 0)
$resultat_par_page= 10;


?>
<html>
<head>
<title>Recherche dans l'annuaire</title>
<script language="JavaScript" src="js_bulletins.js"></script>
<link type="text/css" href="alex_poll2.css" rel="stylesheet">
</head>

<?php


include("recherche_form.php");
[file://on file://on] verifie la taille du mot recherche pour voir si on n'a pas entrer qu'une ou deux lettres
if ($mots == "Votre recherche :")
$mots = "";
$trop_court = false;


if (strlen(stripslashes($mots)) < 3)
[file://la file://la] taille du mot est trop court....
$trop_court = true;


if (!get_magic_quotes_gpc())
[file://on file://on] rajoute des slash pour les magic_quote en OFF
$mots = addslashes($mots);


if (!empty($page)) [file://si file://si] on n'est pas sur la premiere page des resultats
$mots = rawurldecode($mots);
[file://on file://on] separe chaque mot dans un element de tableau
$mots_cherches = explode(" ",$mots);
[file://liste file://liste] des mots a rejetter : vous pouvez en rajouter (ils doivent faire au moins 3 caracteres !!!)
$bad_words[] = "";
$bad_words[] = "des";
$bad_words[] = "une";
$bad_words[] = "les";


[file://on file://on] enleve les petits mots inutiles
$ln_tab = sizeof($mots_cherches);
for ($i=0;$i<$ln_tab;$i++)
[file://on file://on] compare chaque mot a ceux non voulu
{
if (!in_array(trim($mots_cherches[$i]),$bad_words) && strlen($mots_cherches[$i]) > 2)
$mots_reels_recherches[] = $mots_cherches[$i];
}
$nb_mots = sizeof($mots_reels_recherches);
if ($nb_mots > 0 && !$trop_court)
[file://si file://si] on a au moins un mot pour la recherche
{
if (empty($page))
[file://premiere file://premiere] page
$page = 1;
[file://debut file://debut] pour la clause LIMIT de la requete des agents
$debut = ($page - 1) * $resultat_par_page;


[file://on file://on] peut effectuer la requete pour trouver les mots reellement recherches dans les agents et dans les catégories
[file://requete file://requete] pour effectuer la recherche dans les agents


$sql_agent = "SELECT * FROM agent WHERE ";


$cond_agent = "";
[file://requete file://requete] pour les agents
for ($i=0;$i<$nb_mots;$i++)
{
$cond_agent .= " (nom_agent LIKE '%$mots_reels_recherches[$i]%' OR prenom_agent LIKE '%$mots_reels_recherches[$i]%' OR matricule_agent LIKE '%$mots_reels_recherches[$i]%') ";
if ($i != ($nb_mots - 1)) [file://si file://si] on n'est pas sur le dernier mot
$cond_agent .= $booleen;
}


$sql_agent .= $cond_agent;
$sql_agent .= " ORDER BY nom_agent ASC LIMIT $debut,$resultat_par_page ";
echo 'sel : '.$sql_agent;


if ($page == 1)
{
$sql_nb_agent = "SELECT count(matricule_agent) AS count FROM agent WHERE (";
$sql_nb_agent .= $cond_agent;
$sql_nb_agent .= ") ";
}
$lk = connection_BD();
[file://envoi file://envoi] des requetes
$res_agent = send_sql($sql_agent,"trouver des résultats pour les agents (moteur de recherche)");


if ($page == 1)
{
$res_nb_agent = send_sql($sql_nb_agent,"trouver le nombre de sites faisant partie du résultat de la recherche");


$nb_agent_trouves = mysql_result($res_nb_agent,0,'count');
}
else
{
$nb_agent_trouves = isset($_GET['nb_agent_trouves']) ? (int)$_GET['nb_agent_trouves'] : 0;


}
[file://calcul file://calcul] du nombre de pages
$nb_pages = ceil($nb_agent_trouves / $resultat_par_page);


if ($page == 1)
{
?>
<center>

<?php printf ("%d agent(s) trouvé(s) pour "%s" ",$nb_agent_trouves,stripslashes(htmlspecialchars($mots))); ?>

</center>


<?php
}


if ($nb_agent_trouves)
[file://on file://on] a trouve des sites
{
?>

Site(s) trouvé(s) :
<?php
$fin = $page*$resultat_par_page;
if ($fin > $nb_agent_trouves)
$fin = $nb_agent_trouves;
echo ($debut+1).\" à \".$fin;
if ($page != 1)
echo \" (au total : \".$nb_agent_trouves.\" sites trouvés)\n\";
?>

<?php
while ($resultat = mysql_fetch_array($res_agent,MYSQL_ASSOC))
{
[file://affichage file://affichage] du lien vers les pages suivantes si il y a beaucoup de resultats
if ($nb_agent_trouves > $resultat_par_page)
{
?>
<center>

<?php
for ($i=1;$i<$nb_pages;$i++)
{
if ($i != $page)
echo "[file://on file://on] affiche le dernier numero de page (sans tiret apres)
if ($i == $page)
echo $i;
else
{ echo "".$i."\n";
?>

</center>


<?php
}
}
}}//if ($nb_mots > 0)



<STRIKE>Big El Chicano</STRIKE>

1 réponse

Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
22
hello,,tu n'as pas de réponse car ton code est trop long.
Essaye de cerner mieux le problème dans le code, et de condenser.