Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2975 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  I need help ! Requete MySQL sur plusieurs table

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

I need help ! Requete MySQL sur plusieurs table

n°1624975
Supersoub
Posté le 16-10-2007 à 21:08:05  profilanswer
 

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="sea" 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 !
@+
 
 

mood
Publicité
Posté le 16-10-2007 à 21:08:05  profilanswer
 

n°1628554
Supersoub
Posté le 22-10-2007 à 13:07:50  profilanswer
 

Apparemment mon problème n'intéresse pas grand monde...  :heink:  
 
Il y a trop de questions ?
J'ai dit un truc qu'il ne fallait pas ?
 
L'idée est de faire une moteur de recherche sur plusieurs tables...
Je sais qu'il y a des topics où on parle de moteurs de recherche mais pas tel que je veux le réaliser !
 
Peut-être que vous n'êtes simplement pas capable de me répondre !   :D

n°1629106
jpcheck
Pioupiou
Posté le 23-10-2007 à 10:17:09  profilanswer
 

salut, je pense perso qu'il y a plus de code php que de sql, et que par conséquent, ca reboute les gens :)

n°1629373
MagicBuzz
Posté le 23-10-2007 à 15:28:18  profilanswer
 

++
 
lu la première ligne du post "pfff, c long, voyons voir son code si je peux répondre dans le mille sans lire la question"
grmpf c quoi ce code
next
 
[:spamafote]

n°1629374
MagicBuzz
Posté le 23-10-2007 à 15:28:57  profilanswer
 

surtout ça m'a l'air plus une question php ou algo que sgbd

n°1629471
Supersoub
Posté le 23-10-2007 à 16:24:18  profilanswer
 


C'est bien une question MySQL !
 
$tab_kw est un tableau avec des mots entrés par l'user.
Voici ma requete qui recherche dans la table "mot_cle" :  
 
$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=0;
$query2 = "";
for($e=0; $e<=$tab_lenght-1; $e++){
                        $query2 .= "fr = '".stripslashes($tab_kw[$e])."' OR en = '".stripslashes($tab_kw[$e])."'";  
                        if($e <= $tab_lenght-1){$query2 .= " OR ";}
}
$query .= $query2;
$time1 = microtime(); //pour le calcul du temps de requete
$result = mysql_query($query);
$time2 = microtime(); //pour le calcul du temps de requete
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;
                                        }
$time3 = microtime(); //pour le calcul du temps de requete
 
$time_req = $time2-$time1; //pour le calcul du temps de requete
$time_aff = $time3-$time1; //pour le calcul du temps de requete
 
 
Je voudrais aussi rechercher les mots entrés par l'user dans la table "concept" !
Tout comme pour la table "mot-cle", les photos y sont associees via une table intermediaire "ph_fk_ct".
Est-ce qu'il y a moyen de faire ça (recherche dans "mot_cle" et "concept" ) en une seule requete ?

n°1629473
Supersoub
Posté le 23-10-2007 à 16:26:27  profilanswer
 

Rem. : j'avais fait le post plutot long pour bien exposer mon probleme...


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  I need help ! Requete MySQL sur plusieurs table

 

Sujets relatifs
requête multitablesRésultats avec des liaisons de table.
[SQL]Plusieurs valeurs pour une même colonnesouci de prog et de requete
Probleme de requête SQLBons bouquins sur PHP, MySQL, XML, AJAX, MERISE ?
MySQL Faire un DistinctPLZ HELP: PLS-00103: Symbole "=" rencontré à la place d'un des symbole
[RESOLU] problème d'heure dans requête mysql (heure d'hiver) 
Plus de sujets relatifs à : I need help ! Requete MySQL sur plusieurs table


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR