Requete MySQL sur plusieurs tables

Fermé
Supersoub - 17 oct. 2007 à 14:57
 Supersoub - 22 oct. 2007 à 13:11
Bonjour à tous !

Je me REmets depuis peu à la manipulation de base de données MySQL avec PHP et j'ai un peu de mal...

J'ai en fait quelques questions... Je vous explique un peu le tout et si quelqu'un a des pistes ce serait vraiment cool.
Je ne viens pas à la recherche de réponses toutes faites mais des conseils, remarques,... (je connais le site de MySQL mais il ne répond pas toujours à mes question, voilà pourquoi je fais appel à vous)

Le projet :

- l'utilisateur rentre DES mots (mots-clés, concepts) dans un champ texte et clic sur le bouton submit (method="POST" action="search.php)
- je récupère les mots sur search.php
- je recherche dans ma base de donnée (table Mots_cles et table Concepts) les photos associées à ces mots
- j'affiche les photos par pertinence ainsi que le photographe qui a pris la photo.


Petit schéma des mes tables => http://www.microcosm.be/tables.jpg

J'ai donc :

- une table photo
- une table mots-clés
- une table concepts
- une table photographe
- une table qui lie les photos aux mots-clés
- une table qui lie les photos aux concepts


Pour le moment j'ai :

// traitement des mots entrés par l'user
$kw = $_POST['search'];
$kw = addslashes($kw);
$kw = trim($kw);
$tab_kw = explode(" ", $kw);
$tab_lenght = count($tab_kw);
=> Ca ne m'a pas l'air très optimal !! Un conseil ??



//Affichage des mots dans le champ texte de la page search.php
<form name="se" action="search.php" method="post"><input name="search" type="text" size="20" value="
<?php
$i=1;
while($i <= $tab_lenght){echo stripslashes($tab_kw[$i-1])." "; $i++;}
?>
"><input type="submit" value="search"></form>
=> ici j'ai déjà un problème si l'user rentre ' ou "



// La Recherche
$query = "SELECT nom
FROM mot_cle
LEFT JOIN ph_fk_mcl ON mot_cle.id = ph_fk_mcl.id_motcle
LEFT JOIN photos ON ph_fk_mcl.id_photo = photos.id
WHERE ";
$e=1;
$query2 = "";
while($e <= $tab_lenght){
$query2 .= "fr = '".stripslashes($tab_kw[$e-1])."' OR en = '".stripslashes($tab_kw[$e-1])."'";
$e++;
if($e <= $tab_lenght){$query2 .= " OR ";}
}
$query .= $query2;
$result = mysql_query($query);
while($_row = mysql_fetch_row($result)) {
if($count == 0){echo "<tr>";}
if($count == $limit){echo "</tr>"; $count = 0;}
echo "<td align='center'><a href='create_logo.php?img=".$_row[0]."' target='_self'><img src='create_vignette.php?img=".$_row[0]."'></a><br />".$_row[0].".jpg</td>";
$count+=1;
}


=> Là je recherche dans les mots-clés (français et anglais) uniquement !
=> Il faudrait que je cherche aussi dans les concepts !
-> Est-ce que je continue avec des OR pour les concepts ?
-> Est-ce que ça ne va pas être trop lourd ?
-> Est-ce mieux d'utiliser LIKE pour pouvoir utiliser les % et les _ ?
-> Est-ce que je dois changer tous les caractères accentués par _ si j'utilise LIKE ?
-> Comment les classer par pertinence ? Faut-il passer par un tableau PHP ?


=> Ensuite il faut que j'affiche les photographes associés aux photos trouvées
-> Est-ce que je dois faire une nouvelle requête ou est-ce qu'il y a moyen de n'en faire qu'une ?


Voilà, je me rends compte que c'est un gros morceau !! :pt1cable:
J'espère que certains prendront le temps de s'y pencher un peu et de me conseiller, m'aiguiller, ...
Un grand merci d'avance !
@+

1 réponse

Et bien... ça se bouscule au portillon pour m'aider !!

Je sais qu'il y a des topics où on parle de moteur de recherche mais pas comme celui que je veux réaliser !

Je m'y suis peut-être mal pris pour poser mon problème... - ou - Vous n'arrivez pas à me répondre ! (-;
0