8768 sujets

Développement web côté serveur, CMS

Bonjour, je recherche depuis plusieurs jours, comment afficher automatiquement sur une page de mon site internet nommé par exemple sport-pour-les-nuls.php, une zone d'articles ayant dans la base de donnée 1 ou plusieurs mots en rapport avec l'article de la page.

Exemple, la page affiche un article ayant pour sujet le sport, ma base de données à une colonne "meta_keywords" avec plusieurs mots intercallés de virgules : sport, nutrition, poids

J'aimerai qu'en bas de ma page, il y ai au maximum de 3 articles qui s'affiche avec un ou plusieurs mots clés identiques avec la page en cours ou s'il n'y as pas de mots clés identique, afficher les derniers articles publiés.

Pour cela j'ai essayé d'écrire un début de requête (qui ne fonctionne pas !!):


<?php 

// Déclaration des paramètres de connexion
$host = "******";
$user = "****";
$passwd  = "******";

try
{
$bdd = new PDO("mysql:host=$host; dbname=******", $user, $passwd, array (PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
}
catch (PDOException $e)
{
  echo('Erreur : ' . $e->getMessage());
}

$tags= $_GET['meta_keywords'];
$sth2 = $bdd->prepare('SELECT * FROM `liste-articles` WHERE meta_keywords LIKE :tags ORDER BY `id` LIMIT 3');
$sth2->bindValue(':tags' => $tags, PDO::PARAM_STR);
$sth2->execute();

while($sth2 ->fetch(PDO::FETCH_ASSOC))
{
?>


Je ne sais pas si dans l'idée, l'utilisation du $_GET est bon, mais pour le moment, ma requête ne fonctionne pas du tout. Vers quoi vous pouvez m'orienter pour avancer dans ma requête. J'ai trouvé sur WORDPRESS ce genre de requête "RELATED POSTS" Mais c'est pour Wordpress....
C'est ce que je voulais arrivé à faire, à l'aide des mots clés dans la BDD qui serait similaire à ceux de l'article en cours de lecture.

merci de votre aide
Modifié par dafid5 (28 Sep 2016 - 15:35)
Bonsoir.

J'avoue que j'ai du mal à comprendre... pourquoi deux requêtes ? Chaque article a un seul mot clé ? C'est que ce que suggère l'utilisation de LIKE...

Je ne comprends pas non plus votre regex...

Quand quelque chose ne marche pas, l'idéal est de scinder un code en plusieurs parties pour les tester séparément...

Smiley smile
dafid5 a écrit :
Bonjour, je recherche depuis plusieurs jours, comment afficher automatiquement sur une page de mon site internet nommé par exemple sport-pour-les-nuls.php, une zone d'articles ayant dans la base de donnée 1 ou plusieurs mots en rapport avec l'article de la page.

Exemple, la page affiche un article ayant pour sujet le sport, ma base de données à une colonne "meta_keywords" avec plusieurs mots intercallés de virgules : sport, nutrition, poids

J'aimerai qu'en bas de ma page, il y ai au maximum de 3 articles qui s'affiche avec un ou plusieurs mots clés identiques avec la page en cours ou s'il n'y as pas de mots clés identique, afficher les derniers articles publiés.

Pour cela j'ai essayé d'écrire un début de requête (qui ne fonctionne pas !!):


&lt;?php 

// Déclaration des paramètres de connexion
$host = "******";
$user = "****";
$passwd  = "******";

try
{
$bdd = new PDO("mysql:host=$host; dbname=******", $user, $passwd, array (PDO::MYSQL_ATTR_INIT_COMMAND =&gt; "SET NAMES utf8"));
}
catch (PDOException $e)
{
  echo('Erreur : ' . $e-&gt;getMessage());
}
$id = preg_replace('/([^a-z0-9]+)/i', '-', strtolower($_GET['id'])); // Formatage de l'id

$query = "SELECT * FROM `liste-articles` WHERE id=:id";// Creation de la requete

/** la requête que je tente d'écrire **/
$tags= $_GET['meta_keywords'];
$sth2 = $bdd-&gt;prepare('SELECT * FROM `liste-articles` WHERE meta_keywords LIKE :tags ORDER BY `id` LIMIT 3');
$sth2-&gt;bindValue(':tags' =&gt; $tags, PDO::PARAM_STR);
$tab = $sth2-&gt;execute();

$req = $bdd-&gt;prepare($query); //ma requête qui fonctionne pour afficher l'article sur ma page
$result = $req-&gt;execute(array('id' =&gt; $id)); // 

if($result)
{
while($tab = $req-&gt;fetch(PDO::FETCH_ASSOC))
{
  if (isset($tab['titre']))
  {
?&gt;


Je ne sais pas si dans l'idée, l'utilisation du $_GET est bon, mais pour le moment, ma requête ne fonctionne pas du tout. Vers quoi vous pouvez m'orienter pour avancer dans ma requête. J'ai trouvé sur WORDPRESS ce genre de requête "RELATED POSTS" Mais c'est pour Wordpress....
C'est ce que je voulais arrivé à faire, à l'aide des mots clés dans la BDD qui serait similaire à ceux de l'article en cours de lecture.
merci de votre aide

Il semble y avoir une erreur dans la requête SQL au niveau du Where :
WHERE id=:id"
devrait être remplacé par :
WHERE id=" . $id
sauf erreur de ma part car je ne connais pas suffisamment PHP...
@zelena
A priori, l'expression régulière cherche à remplacer dans la valeur d'identifiant reçue tous les caractères autres que lettre ou chiffre par un "-".
Un peu pressé ce matin, pas regardé plus avant pourquoi deux requêtes SQL...
Zelena a écrit :
Bonsoir.

J'avoue que j'ai du mal à comprendre... pourquoi deux requêtes ? Chaque article a un seul mot clé ? C'est que ce que suggère l'utilisation de LIKE...

Smiley smile


Bonjour Zelena,

c'est vrai que j'aurai du présenté une seule requête. Ma première requête permet juste d'afficher mon article sur ma page (celle-là fonctionne !!). Je me rend compte qu'elle embrouille plus qu'elle n'aide.

la requête que j'essaye de faire et d'appeler un ou plusieurs mots-clés se trouvant dans la base de donnée. Chaque articles a PLUSIEURS mots-clés. Le but est de proposer aux lecteurs une sélection d'article ayant un sujet commun.

J'ai utilisé LIKE plutôt que = car si j'ai écris par erreur un mot-clé dans ma BDD avec ou sans pluriel ou majuscule, je me disais que ça permettrait d'obtenir quand même un résultat.


<?php 

// Déclaration des paramètres de connexion
$host = "******";
$user = "****";
$passwd  = "******";

try
{
$bdd = new PDO("mysql:host=$host; dbname=******", $user, $passwd, array (PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
}
catch (PDOException $e)
{
  echo('Erreur : ' . $e->getMessage());
}

/** la requête que je tente d'écrire **/
$tags= $_GET['meta_keywords'];
$sth2 = $bdd->prepare('SELECT * FROM `liste-articles` WHERE meta_keywords LIKE :tags ORDER BY `id` LIMIT 3');
$sth2->bindValue(':tags' => $tags, PDO::PARAM_STR);
$sth2->execute();

while($sth2 ->fetch(PDO::FETCH_ASSOC))
{
?>

Modifié par dafid5 (28 Sep 2016 - 15:37)
Bonjour.

Si je ne m'abuse, le 'fetch' doit être fait sur $sth2 et non sur $tab (celui-ci donnera le nombre de lignes affecté par la requête).

Vous êtes sûr que l'on peut utiliser bindValue avec ces arguments ?

@sepecat : c'est vrai, pour la regex vous avez raison... Smiley smile


Smiley smile
Zelena a écrit :
Bonjour.

Vous êtes sûr que l'on peut utiliser bindValue avec ces arguments ?

@sepecat : c'est vrai, pour la regex vous avez raison... Smiley smile


Smiley smile


En feuilletant internet, j'ai trouvé que dans les requêtes dynamiques, il y avait bindValue ou bindParam. Mais je ne sais pas faire la différence entre les deux et je ne sais pas l'utilité. j'ai essayé de suivre les indications de php.net.
Salut, après il me semble que like doit avoir les '%'

au pire, met le % au debut et à la fin mais oublie pas de nettoyer* t'a variable pour éviter les injections sql


exemple :

$tags= "%" . $_GET['meta_keywords'] . "%"; 



*- addslashes()
- mysql_real_escape_string()
- stripslashes()
- html_entity_decode()
- htmlspecialchars()
Modifié par JENCAL (28 Sep 2016 - 17:27)
JENCAL a écrit :
Salut, après il me semble que like doit avoir les '%'

au pire, met le % au debut et à la fin mais oublie pas de nettoyer* t'a variable pour éviter les injections sql


exemple :

$tags= "%" . $_GET['meta_keywords'] . "%"; 



*- addslashes()
- mysql_real_escape_string()
- stripslashes()
- html_entity_decode()
- htmlspecialchars()



Bonsoir Jencal, merci de votre réponse, mais étant novice en php, ça m'embrouille un peu. Cependant, j'ai effectué quelques recherches selon vos recommandations et voila ce que j'obtiens. PS : mon code ne fonctionne toujours pas, mais une question que je me pose, est-ce que le $tags = ($_GET['meta_keywords']); est la bonne expression pour effectuer une requête en incluant des données de ma base de donnée OU est-ce que je suis sur la mauvaise voix ?


<?php 

// Déclaration des paramètres de connexion
$host = "******";
$user = "****";
$passwd  = "******";

try
{
$bdd = new PDO("mysql:host=$host; dbname=******", $user, $passwd, array (PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
}
catch (PDOException $e)
{
  echo('Erreur : ' . $e->getMessage());
}

function securite_bdd($tags)
	{
		if(ctype_digit($tags))
		{
			$tags = intval($_GET['meta_keywords']);
		}
		else
		{
			$tags = mysql_real_escape_string($_GET['meta_keywords']);
			$tags = addcslashes(($_GET['meta_keywords']), '%_');
		}
		
		return $tags;
	}
$sth2 = $bdd->query('SELECT * FROM `liste-articles` WHERE meta_keywords LIKE "'.$tags.'" ORDER BY `id` LIMIT 3');

while($sth2 ->fetch(PDO::FETCH_ASSOC))
{
?>
<li>
<img src="<?php echo $sth2['images']; ?>" alt="<?php echo $sth2['titre']; ?>" data-pin-nopin="true">
<h3><?php echo $sth2['titre']; ?></h3>
<p><a href="actualites-dietetiques.php?id=<?php echo $sth2['id']; ?>-<?php echo $sth2['url']; ?>">Lire l'article</a></p>
</li>
<?php
}
?>


Bonjour.

Moi il y a une question que je me pose : comment les 'keywords' sont-ils codés dans votre base de données ? Sont-ils concaténés dans une chaine de caractères ?

De l'autre côté, il y a le ou les mots qui ont été rentrés par l'utilisateur : $_GET['meta_keywords']... Rien n'indique qu'ils ont été tapés le même ordre que celui de la base de données...

Cela fait beaucoup d'inconnus... Il faudrait que vous puissiez tester directement vos requêtes SQL, dans phpMyAdmin avec Wamp par exemple...

Smiley smile
attention à ne pas faire n'importe quoi quand même Smiley smile

tu as ces deux lignes à la suite.
$tags = mysql_real_escape_string($_GET['meta_keywords']);
$tags = addcslashes(($_GET['meta_keywords']), '%_');


Cela ne sert à rien, car tu assigne $tags à la première ligne et tu le réecrase direct après.

ce que je te conseillé de faire été d'ajouter un "%" à la fin et au début du mot que tu récupére via $GET_[]

car comme l'indique Zelena, on ne sait pas comment les keywords sont en base de donnée, si c'est une chaine entière alors vaut mieux mettre les pourcentage "%" des deux cotés.

Donc pour commencer, essaye avec ce que je t'ai donnée au préalable
$tags= "%" . $_GET['meta_keywords'] . "%"; 

avant de faire des addcslashes ou autres de partout.

Vérifie quand même (on sait jamais) que ton formulaire est bien en method GET du coté HTML et non POST.
Zelena a écrit :
Bonjour.

Moi il y a une question que je me pose : comment les 'keywords' sont-ils codés dans votre base de données ? Sont-ils concaténés dans une chaine de caractères ?

De l'autre côté, il y a le ou les mots qui ont été rentrés par l'utilisateur : $_GET['meta_keywords']... Rien n'indique qu'ils ont été tapés le même ordre que celui de la base de données...

Cela fait beaucoup d'inconnus... Il faudrait que vous puissiez tester directement vos requêtes SQL, dans phpMyAdmin avec Wamp par exemple...

Smiley smile


Merci Zelena, de tes questions ? je me rend compte que n'ayant peu de connaissance en php, je n'arrive pas à dire ce que je veux vraiment.

Non l'utilisateurs ne rentre pas de mots clés !!! d'où ma question est-ce que je suis sur la bonne voix avec le $_GET ? mon lecteurs lit un article sur un sujet X ou Y, ce que j'aimerai lui proposer, ce sont des lectures qui ont un sujet +/- identiques. Et pour cela j'ai créé dans ma BDD, ne colonne meta_keywords de type VARCHAR. Les mots clés inscrits dans cette colonne sont inscrits comme ça : viande, boeuf, protéines, poids

Ensuite effectivement les mots-clés ne sont pas rentrés dans le même ordre selon les articles, d'ou mon utilisation de LIKE pour tenter de retrouver un mot plusieurs mots clés. Mais ce n'est peut-être pas la bonne écriture et méthode.

je ne veux pas faire un moteur de recherche, mais juste un affichage d'articles dont la thématique pourrait ressembler.
JENCAL a écrit :
attention à ne pas faire n'importe quoi quand même Smiley smile

tu as ces deux lignes à la suite.
$tags = mysql_real_escape_string($_GET['meta_keywords']);
$tags = addcslashes(($_GET['meta_keywords']), '%_');


Cela ne sert à rien, car tu assigne $tags à la première ligne et tu le réecrase direct après.

ce que je te conseillé de faire été d'ajouter un "%" à la fin et au début du mot que tu récupére via $GET_[]

car comme l'indique Zelena, on ne sait pas comment les keywords sont en base de donnée, si c'est une chaine entière alors vaut mieux mettre les pourcentage "%" des deux cotés.

Donc pour commencer, essaye avec ce que je t'ai donnée au préalable
$tags= "%" . $_GET['meta_keywords'] . "%"; 

avant de faire des addcslashes ou autres de partout.

Vérifie quand même (on sait jamais) que ton formulaire est bien en method GET du coté HTML et non POST.


Merci de ta réponse, j'ai donc confirmation d'une erreur de ma part, l'utilisation du $_GET ! Je n'ai pas de formulaire, l'utilisateur ne rentre pas de mots clés. Smiley decu Je ne suis donc pas sur la bonne voix !

Lien

Exemple concret avec le lien ci-dessus, l'article porte sur l'alimentation d'un bébé
les mots clés pour cet article sont : diversification, alimentation, bébé, oeuf, matière grasse

Tout en bas de l'article, j'aimerai suggérer au lecteur, 3 autres articles ayant un sujet similaires
Pour cela, je souhaitais que la requête pour afficher mes données demandes à ma base de donnée d'affiché 3 articles ayant un mot ou plusieurs mots ressemblant dans la colonne meta_keywords.
Ok du coup le GET c'est pas bon... car il faut soit utilisé un formulaire html soit utilisé une requête AJAX.

Toi ton GET, ou plutot ton $tabs, devrait venir d'un résultat de requête SQL !

au moment où tu affiches tes articles il faut "exporter" (je ne sais pas encore comment parce que je suis pas dans ton code) les meta de tes articles et les ID de tes articles déjà affichés, et faire un
SELECT article FROM tb_article where meta LIKE "%META1%" AND id NOT IN (id1, id2, etc...)

Modifié par JENCAL (29 Sep 2016 - 11:15)
JENCAL a écrit :
Ok du coup le GET c'est pas bon... car il faut soit utilisé un formulaire html soit utilisé une requête AJAX.

Toi ton GET, ou plutot ton $tabs, devrait venir d'un résultat de requête SQL !

au moment où tu affiches tes articles il faut "exporter" (je ne sais pas encore comment parce que je suis pas dans ton code) les meta de tes articles et les ID de tes articles déjà affichés, et faire un
SELECT article FROM tb_article where meta LIKE "%META1%" AND id NOT IN (id1, id2, etc...)


Bonsoir, je vous remercie pour la piste Smiley cligne
Pour une question de simplicité, car j'aurai probablement d'autres questions je met en pièce jointe l'imprim écran de la structure de ma BDD et une copie de mon code ACTUEL.

upload/40410-BDD.jpg

ma page php (enfin la partie nécessaire)


<!DOCTYPE html>
<?php 

// Déclaration des paramètres de connexion
$host = "***";
$user = "******";
$passwd  = "******";

try
{
$bdd = new PDO("mysql:host=$host; dbname=*******", $user, $passwd, array (PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
}
catch (PDOException $e)
{
  echo('Erreur : ' . $e->getMessage());
}

$query = "SELECT * FROM `liste-articles` WHERE id=:id";

$sth2 = $bdd->query('SELECT * FROM `liste-articles` WHERE meta_keywords LIKE meta_keywords ORDER BY `id` LIMIT 3');
$tab = $sth2->execute(array('id' => $id));


$req = $bdd->prepare($query); // preparation de la requête
$result = $req->execute(array('id' => $id));

// Recuperation des resultats
if($result)
{
while($tab = $req->fetch(PDO::FETCH_ASSOC))
{
  if (isset($tab['titre']))
  {
?>
<head>
.....
</head>

<body>

<div class="container container--main">
<div class="grid">
<div class="article_title--before grid__item  float--left lap-and-up-two-thirds">
<h1 class="article__title  article__title--single" itemtype="name"><?php echo $tab['titre']; ?></h1>
<div class="article__title__meta">
<div class="article__author-name"><?php echo $tab['sources']; ?></div> <time class="article__time" datetime="<?php echo $tab['date']; ?>"> le <?php echo $tab['date']; ?></time>
</div>
</div>
<article class="post-article  js-post-gallery  grid__item  main  float--left  lap-and-up-two-thirds">
<p class="cadre-intro" style="text-align: justify;"><?php echo nl2br(htmlspecialchars ($tab['intro'])); ?></p>
<p><img class="aligncenter size-full wp-image" alt="<?php echo $tab['alt_images']; ?>" src="<?php echo $tab['images']; ?>" height="241" width="510"></p>
<h2 style="text-align: justify;"><?php echo $tab['titre_article']; ?></h2>
<p style="text-align: justify;"><?php echo nl2br(htmlspecialchars ($tab['article'])); ?></p>
<h2 style="text-align: justify;"><?php echo $tab['titre_article2']; ?></h2>
<p style="text-align: justify;"><?php echo nl2br(htmlspecialchars ($tab['article2'])); ?></p>
<h2 style="text-align: justify;"><?php echo $tab['titre_article3']; ?></h2>
<p style="text-align: justify;"><?php echo nl2br(htmlspecialchars ($tab['article3'])); ?></p>
<h2 style="text-align: justify;"><?php echo $tab['titre_article4']; ?></h2>
<p style="text-align: justify;"><?php echo nl2br(htmlspecialchars ($tab['article4'])); ?></p>
<p><?php echo $tab['link']; ?></p>
<p class="cadre-src" style="text-align: justify;"><em>Pour aller plus loin : <br><?php echo nl2br(htmlspecialchars ($tab['notes'])); ?></em></p>
<div class="grid"></div>
<div class="article__meta  article--single__meta">
<div class="btn-list"><div class="btn  btn--small  btn--secondary">Catégories</div> <a class="btn  btn--small  btn--tertiary" href="<?php echo $tab['url_categories']; ?>" title="Voir tous les articles par: <?php echo $tab['categories']; ?>"><?php echo $tab['categories']; ?></a></div>
<div class="btn-list"><div class="btn  btn--small  btn--secondary">Tagué</div> 
<a class="btn  btn--small  btn--tertiary" href="../actualites-alimentation-dietetique-nutrition.php" title="Voir tous les articles étiqueté avec alimentation"><?php echo $tab['keywords']; ?></a>
</div>
</div>

<?php
}
	 }
}
?>

<hr class="separator  separator--subsection">
<div id="wp_rp_content">
<div class="widget__title  widget--sidebar__title">
<h2 class="hN">Articles sur le même thème</h2>
</div>
<ul class="rig columns-3">
<?php 
while($tab = $sth2->fetch(PDO::FETCH_ASSOC))
{
?>
<li>
<img src="<?php echo $tab['images']; ?>" alt="<?php echo $tab['titre']; ?>" data-pin-nopin="true">
<h3><?php echo $tab['titre']; ?></h3>
<p><a href="actualites-dietetiques.php?id=<?php echo $tab['id']; ?>-<?php echo $tab['url']; ?>">Lire l'article</a></p>
</li>
<?php
}
?>
</ul>
</div>
<hr class="separator  separator--section">
</article>
</body></html>

Modifié par dafid5 (30 Sep 2016 - 11:14)
je vois pas comment pourquoi tu utilise $_GET['id'].......
tu envoie rien en GET donc ça doit surment être vide.
JENCAL a écrit :
Ok du coup le GET c'est pas bon... car il faut soit utilisé un formulaire html soit utilisé une requête AJAX.

Toi ton GET, ou plutot ton $tabs, devrait venir d'un résultat de requête SQL !

au moment où tu affiches tes articles il faut "exporter" (je ne sais pas encore comment parce que je suis pas dans ton code) les meta de tes articles et les ID de tes articles déjà affichés, et faire un
SELECT article FROM tb_article where meta LIKE "%META1%" AND id NOT IN (id1, id2, etc...)


Bonjour Jencal,


$sth2 = $bdd->prepare('SELECT `id`,`url`,`thumbs`,`titre`,`meta_keywords` FROM `liste-articles` WHERE `meta_keywords` LIKE `%meta_keywords%` AND `id` ORDER BY `id` LIMIT 6');
$tab = $sth2->execute(array(':meta_keywords' => '$'.meta_keywords.'$'));


Je ne trouve pas comment écrire après le LIKE ma requête, %meta_keywords% pour demander à ma requête de chercher une concordance d'un ou plusieurs mots-clés inscrits dans la colonne meta_keywords excepté la ligne actuelle. Si j'inscris : LIKE `meta_keywords`, cela va chercher le mot meta_keywords or je souhaite le contenu de la colonne. donc il faudrait faire une requête dans une requête ?

De plus je ne suis pas sûr de comprendre votre proposition avec le NOT IN. Dans les exemples que j'ai pu lire sur les forums, ils donnaient des valeurs précise (chiffre, mot), or là, si je comprend à peu prêt l'utilité de ce NOT IN, dans mon cas, je devrais inscrire l'ID de ma ligne de la BDD qui est en cours de lecture. Mais mon ID change à chaque fois qu'un lecteur consulte un article différent et chaque article à son ID. Donc il faudrait mettre un NOT IN (id variable ou id de la page en cours) ?

Suis-je clair ? car ce n'est pas évident à expliquer.
Bonjour, je suis toujours entrain de me tire les cheveux, je vous épargne la photo ça va vous faire pitié ...

J'ai trouvé sur le forum php france une vielle requête qui a à peu prêt la même utilité que celle que je veux faire, à savoir rechercher dans ma table, des doublons relatifs. Mais cette requête porte sur un seul mot dans une case, or dans ma BDD, ma case keywords comporte plusieurs mots. Je ne souhaite pas que ma requète affiche seulement les doublons exacts, mais seulement quand il y a un mot ou plusieurs identiques.


ref_article | caracteristique | valeur
----------------
1 | couleur | rouge
1 | taille | XL
2 | couleur | bleu
3 | couleur | rouge
3 | taille | XL
....
7 | taille | XL
8 | couleur | rouge
8 | taille | XL



SELECT a.ref_article
FROM 
(
    SELECT caracteristique, valeur
    FROM articles_caracs
    WHERE ref_article = 1
) tmp
INNER JOIN articles_caracs a 
    ON tmp.caracteristique = a.caracteristique
    AND tmp.valeur = a.valeur
    AND ref_article <> 1
GROUP BY a.ref_article
HAVING COUNT(DISTINCT a.caracteristique) = 
    (
        SELECT COUNT(DISTINCT caracteristique)
        FROM articles_caracs
        WHERE ref_article = 1
    )


quelqu'un a une idée ou aurait déjà réalisé ce type de requête ?
dafid5 a écrit :


Bonjour Jencal,


$sth2 = $bdd-&gt;prepare('SELECT `id`,`url`,`thumbs`,`titre`,`meta_keywords` FROM `liste-articles` WHERE `meta_keywords` LIKE `%meta_keywords%` AND `id` ORDER BY `id` LIMIT 6');
$tab = $sth2-&gt;execute(array(':meta_keywords' =&gt; '$'.meta_keywords.'$'));


Je ne trouve pas comment écrire après le LIKE ma requête, %meta_keywords% pour demander à ma requête de chercher une concordance d'un ou plusieurs mots-clés inscrits dans la colonne meta_keywords excepté la ligne actuelle. Si j'inscris : LIKE `meta_keywords`, cela va chercher le mot meta_keywords or je souhaite le contenu de la colonne. donc il faudrait faire une requête dans une requête ?

De plus je ne suis pas sûr de comprendre votre proposition avec le NOT IN. Dans les exemples que j'ai pu lire sur les forums, ils donnaient des valeurs précise (chiffre, mot), or là, si je comprend à peu prêt l'utilité de ce NOT IN, dans mon cas, je devrais inscrire l'ID de ma ligne de la BDD qui est en cours de lecture. Mais mon ID change à chaque fois qu'un lecteur consulte un article différent et chaque article à son ID. Donc il faudrait mettre un NOT IN (id variable ou id de la page en cours) ?


Pourriez-vous m'expliquer l'intérêt du NOT IN dans cette requête ?

merci