8796 sujets

Développement web côté serveur, CMS

Bonjour,

Je suis en train de coder ma page de résultats pour mon petit moteur interne.

J'ai donc trois table pour gérer tout ça ( Merci à marcv pour ce schéma ):


Article

+----+---------------------------------+----------------+
| id | titre                           | contenu        |
+----+---------------------------------+----------------+
|  1 | Analyse du Petit Chaperon rouge | <ici le texte> |
|  2 | Mon avis sur Cendrillon         | <ici le texte> |
|  3 | Une suite pour Millénium ?      | <ici le texte> |
|  4 | abbr et acronym                 | <ici le texte> |
+----+---------------------------------+----------------+

Tag

+----+-------------+
| id | nom         |
+----+-------------+
|  1 | conte       |
|  2 | littérature |
|  3 | web         |
|  4 | html        |
|  5 | j'aime      |
|  6 | j'aime pas  |
+----+-------------+

Article_Tag

+------------+--------+
| id_article | id_tag |
+------------+--------+
|          1 |      1 |
|          1 |      2 |
|          1 |      5 |
|          2 |      1 |
|          2 |      2 |
|          2 |      6 |
|          3 |      2 |
|          3 |      5 |
|          4 |      3 |
|          4 |      4 |
|          4 |      5 |
+------------+--------+


Je vous met ma requête mysql avec jointures ( merci à Heyoan ):



$motcle = mysql_real_escape_string(htmlspecialchars($_POST['champ-texte']));
	$sql = "SELECT distinct a.id, a.titre, a.contenu ,a.timestamp, t.nom
	FROM article a, tag t, article_tag at 
	WHERE a.id = at.id_article and at.id_tag = t.id and t.nom like '%$motcle%'";
	

	$reponse = mysql_query($sql);
		while ( $donnees = mysql_fetch_array($reponse)) 
			{
			echo 'Titre : '.$donnees['titre'].'<br>
			Contenu : '.$donnees['contenu'].'<br>
			Date :' . date('d/m/Y à H\hi', $donnees['timestamp']) . '<br>
			Mots clés associés : '.$donnees['nom'].'<br><br>';
			}
			}


voici la question que je me pose :

Par exemple si je tape "conte" dans le champ de recherche, il va bien me renvoyer dans la page resultat.php les articles avec leurs id repectives 1 et 2.

Si maitenant, je tape "conte j'aime", il ne va renvoyer dans la page resultat.php aucun résultat.

J'aimerais que la requête renvoie les articles associés au mot clé "conte", ceux associés au mot clé "j'aime", et éventuellement ceux associés au deux mots clés si ils existent.

J'espère que ma question est assez précise.

Merci d'avance à ceux qui pourront m'aider !
Modifié par frdiard (19 Apr 2009 - 16:15)
Re',

le principe est de décomposer le champ recherche en plusieurs mot-clés (un par espace entre les mots) et de rajouter plusieurs clauses LIKE. Tu as un exemple dans ce post.
Merci beaucoup pour ce code !

Mais j'arrive toujours pas à l'adapter à mon cas.

Si je peux encore te demander un peu d'aide.

Un grand merci Smiley cligne .

François

$motcle = mysql_real_escape_string(strip_tags($_POST['champ-texte']));
$sql = "SELECT distinct a.id, a.titre, a.contenu ,a.timestamp, t.nom
FROM article a, tag t, article_tag at 
WHERE a.id = at.id_article and at.id_tag = t.id";
if(trim(preg_replace("/[\s,]+/", '', $motcle)) != '') {
	$keywords = preg_split("/[\s,]+/", $motcle);
	$keywords = array_unique($keywords);
	$sql .= ' AND (';
	$prefix = '';
	for($i = 0; $i < count($keywords); $i++) {
		$sql .= $prefix."t.nom LIKE '%".$keywords[$i]."%' ";
		$prefix = 'OR ';
	}
	$sql .= ')';
}

Modifié par Heyoan (04 Aug 2009 - 20:06)
Tu me sauve la vie ! Je galère depuis hier soir à modifier ton code sans succès, je viens de repérer mon erreur Smiley lol .

Merci beaucoup Heyoan ! Smiley cligne