Titre: Methodologie formulaire recherche
Posté par: ouarzazat le le 10-04-2006 a 15:55:12
Bonjour à tous,
voilà un post qui je l'espère suscitera beaucoup de réactions.
Je ne suis pas encore très aguéri au php/sql et pourtant j'ai décidé de me lancer dans la création d'un projet qui consiste à référencer des sites web.
J'ai donc créé une base de donnée, une page formulaire d'insertion et une page formulaire de recherche.
Et c'est au niveau de la page formulaire de recherche que je suis vraiment noyé. Celle-ci contient le formulaire de recherche, le code pour traiter les requêtes et le code pour afficher les résultats, du 3 en 1 quoi. Le formulaire de cette page appelle cette même page.
Et je trime comme c'est pas permi, alors je crois que j'ai vraiment besoin d'aide, je vais donc vous expliquer la méthodologie que j'ai utilisé et vous mettre des exemples de code afin de recueillir vos commentaires.
Cela fait déjà bien 2 semaines que j'ai commencé à bosser dessus et là je commence à baisser les bras.
Donc voici ma méthodologie, je vais vous décrire dans l'ordre ce qu'il se passe sur cette page 3 en 1:
1 - Je récupère les données postées = les critères sélectionnés sur le formulaire de recherche, en majorité ils proviennent de cases à cocher.
Code:
[size=2]if (ISSET ($_POST['forum'])) {$forum = 'forum'; $option_forum = "checked=\"checked\"";}// ça c'est pour qu'au rechargement de la page, les critères sélectionnés soient cochés par défaut else {$forum = "1"; $option_forum="";}[/size]
|
|
2 - Les critères de sélection appartiennent à différents catégories: ex: la description du site, les coordonnées de l'éditeur, la localisation du service qu'il propose (ex: petites annonces dans l'AIN), etc...
Donc s'il y a un critère sélectionné concernant la description du site, je recherche dans la bdd tous les id qui correspondent. Ces id je les écrit dans une table_recherche avec un code rappelant la catégorie à laquelle ils appartiennent.
Par exemple pour les critères de description le code vaut 1.
Ce qui donne dans ma table recherche:
code | id --------------------- 1 | 3 1 | 6 1 | 25 1 | 34
Et ainsi de suite pour chaque catégorie, la table_recherche ressemblera à celà:
code_recherche | identification_id -------------------------------------- 1 | 3 1 | 6 1 | 25 1 | 34 2 | 6 2 | 25 2 | 34 2 | 42 7 | 6 7 | 25 7 | 34
Un exemple:
Code:
//Si critères d'Indexation remplis: if ( $payante!="1" OR $gratuite!="1" OR $echange!="1" )// si un critère n'a pas été posté, j'initialise sa valeur à 1; { $sql_id_indexation = mysql_query(" SELECT identification_id FROM tab_description WHERE indexation_id IN (SELECT indexation_id FROM tab_indexation WHERE payante='$payante' OR gratuite='$gratuite' OR echange='$echange') ");
while ($array_identification_id = mysql_fetch_array($sql_id_indexation)) { $identification_indexation_id = $array_identification_id['identification_id']; mysql_query("INSERT INTO tab_recherche VALUES ('', '8', '$identification_indexation_id')"); }
}
|
|
3 - Ensuite je créé une requête qui va regrouper tous id et leur réattribuer des code_recherche qui se suivent. Je vous ai montré dans l'exemple de table_recherche que le code recherche pouvait sauter de 2 à 7 par exemple. Je rappelle que les codes recherche correspondent à la catégorie d'information auxquels appartienent les id. Avec ce code dans notre exemple les enregistrements dont le code recherche vaut 7 vont se voir réattribuer un code recherche qui vaut 3.
Vous allez comprendre pourquoi je fais ça dans le 4-
J'ai bien essayé de faire un code_recherche qui s'auto incrémente avec une requête du style: code_recherche =0 si critère description rempli, code_recherche++, puis écrire dans la table, mais c'était bancal, donc j'ai opté pour la solution ou le code_recherche est prédéfini.
Voilà le code dont je me sert pour réatribuer les codes recherche:
Code:
$sql_global = mysql_query("SELECT * FROM tab_recherche "); if ($sql_global!="")// et ça, est-ce valable comme requete?? { $i = '1'; while ($req_code_recherche = mysql_fetch_array($sql_global)) { $num_code_recherche = $req_code_recherche['code_recherche']; $liste_id_par_code = mysql_query("SELECT * FROM tab_recherche WHERE code_recherche='$num_code_recherche'"); while ($req_liste_id = mysql_fetch_array($liste_id_par_code)) { $insert_id = $req_liste_id['identification_id']; mysql_query("UPDATE tab_recherche SET code_recherche='$i', identification_id='$insert_id' WHERE identification_id='$insert_id'"); } $i++; }
|
|
4 - Puis je compte le nbre de code_recherche avec ceci:
Code:
$compte_code_recherche = mysql_query("SELECT count(code_recherche) FROM tab_recherche GROUP BY code_recherche"); $nbre_code_recherche = mysql_num_rows($compte_code_recherche);
|
|
Et c'est là ou je fais le recoupement des id, où je choisi les id qui appartiennent à toutes les catégories, donc les id que je vais exploiter pour afficher les résultats.
Dans l'exemple table_recherche, les id sont les id numéro 6, 25 et 34.
Cette requête est la suivante:
Code:
switch ($nbre_code_recherche) { case 1: // dans le cas où $nbre_code_recherche vaut 1 $regroupement_identification_id = mysql_query("SELECT identification_id FROM tab_recherche WHERE code_recherche='1' GROUP BY identification_id ORDER BY identification_id ASC"); break;
case 2: $regroupement_identification_id = mysql_query("SELECT identification_id FROM tab_recherche WHERE code_recherche='1' AND identification_id IN ( SELECT identification_id FROM tab_recherche WHERE code_recherche='2') GROUP BY identification_id ORDER BY identification_id ASC"); break;
case 3: $regroupement_identification_id = mysql_query("SELECT identification_id FROM tab_recherche WHERE code_recherche='1' AND identification_id IN ( SELECT identification_id FROM tab_recherche WHERE code_recherche='2' AND identification_id IN ( SELECT identification_id FROM tab_recherche WHERE code_recherche='3')) GROUP BY identification_id ORDER BY identification_id ASC"); break;
|
|
et ainsi de suite jusqu'à 12, en effet j'ai 12 catégories de crritères différentes. Puis je vide ma table recherche avec truncate.
5 - Bon maintenant j'ai tous les id que je vais exploiter, j'affiche le formulaire de recherche.
6 - Puis j'affiche les résultats de ma recherche en exploitant les id. je commence par:
Code:
while ($result_identification_id = mysql_fetch_array($regroupement_identification_id)) { $result_id = $result_identification_id['identification_id'];
$tab_indexation = mysql_query(" SELECT payante, gratuite, echange FROM tab_indexation WHERE indexation_id IN (SELECT indexation_id FROM tab_description WHERE identification_id='$result_id')");
//et ainsi de suite je récupère toutes les infos relatives à l'id; |
|
7 - ensuite je met en forme les résultats de cet id dans un tableau.
8 - et ainsi de suite pour chaque id.
C'est comme ça que je m'y suis pris, tout me parait cohérent et pourtant ça ne marche pas, j'ai pas d'erreur spéciale quand je lance ma recherche, c'est simplement que quand je bidouille des fois j'ai un résultat qui s'affiche des fois 3, des fois rien du tout pour une même requête.
J'espère que vous pourrez me faire part de votre expérience. J'ai besoin d'un gourou pour m'en sortir!! Si mon cas vous intéresse je vous envoie les codes sources, un dump de la base, n'hésitez pas!
Je suis conscient que c'est beaucoup mais j'aurai vraiment besoin d'un coup de pouce, même minuscule.
Merci à tous, à bientôt! |
Titre: Re:Methodologie formulaire recherche
Posté par: Martin. le le 10-04-2006 a 16:24:37
Je prendrais volontier un zip du tout + sql, je m'ennuie (installation Gentoo, compilation du kernel...). De plus, je me perds dans cet énorme message...
Finalement, si je comprends bien ta méthode pour la recherche : L'utilisateur choisit son critère de recherche (lieu, description, ...), puis tu récupères tous les critères choisis et leur valeur, pour ensuite chercher dans la BDD ? |
Titre: Re:Methodologie formulaire recherche
Posté par: ouarzazat le le 10-04-2006 a 16:52:08
J'ai mis les fichiers en ligne, avec un dump de la base contenant quelques enregistrements. J'ai aussi placé la page où l'on saisit ces informations pour qu'elles puissent etre enregistrees dans la base: http://testplateforme.free.fr/
Voilà, j'espère que ça vous aidera à m'aider, merci !! |
Titre: Re:Methodologie formulaire recherche
Posté par: Martin. le le 10-04-2006 a 16:56:25
Il m'est impossible d télécharger une source PHP :s
Pourriez-vous faire un fichier zip ? |
Titre: Re:Methodologie formulaire recherche
Posté par: ouarzazat le le 10-04-2006 a 17:02:10
Je t'ai mis un .rar et un .zip!! Bonne chance, si tu as une question n'hesites pas |
Titre: Re:Methodologie formulaire recherche
Posté par: ouarzazat le le 10-04-2006 a 17:03:20
Titre: Re:Methodologie formulaire recherche
Posté par: Martin. le le 10-04-2006 a 17:25:23
Ton code m'a l'air d'être un bazard pas possible :s Je ne comprends pas pourquoi tu as divisé le tout en 25 tables ! Donc si tu veux mon avis, tu as choisi un bien mauvais chemin :s
Si tu veux, je peux t'aider par IM à arranger (j'entends plutôt recommencer :s) ton script... |
Titre: Re:Methodologie formulaire recherche
Posté par: erwinol le le 20-09-2006 a 20:11:05
| Je ne comprends pas pourquoi tu as divisé le tout en 25 tables ! |
|
Je ne suis pas partisant du "tout en 5 tables". Il y a des règles à appliquer lorsque tu construits une base de données et ça multiplie rapidement les tables. |
Titre: Re:Methodologie formulaire recherche
Posté par: Martin. le le 20-09-2006 a 20:36:36
| Je suis d'accord avec toi. Cependant, le script que j'ai recu comportait des dizaines de tables ne comportant chacune qu'un seul champ... |
Forum-webmaster | Actionné par YaBB SE
© 2001-2003, YaBB SE Dev Team. Tous droits réservés.
|