Aide pour finir - requete SQL avec search avec jointures

Fermé
stephweb13 Messages postés 9 Date d'inscription vendredi 30 septembre 2011 Statut Membre Dernière intervention 11 mai 2020 - Modifié par stephweb13 le 14/10/2015 à 18:26
DelNC Messages postés 2234 Date d'inscription samedi 25 octobre 2014 Statut Membre Dernière intervention 22 février 2020 - 15 oct. 2015 à 03:48
Bonjour,
je viens ici demander un peu d'aide SVP, car je galère à finaliser une requete avec des jointures.
Mon but est de récupérer ma liste des catégories dans ma page de gestions des catégories, et aussi d'afficher à coté du Nom de chaque catégories le nombre d'articles publiés (statut 1) par catégorie.

Avec un search WHERE mots clés entrés pour afficher mes catégories selon mots clés entrés, je ni arrive pas.
Avec le code ci-dessous, je n'arrive pas à faire en sorte que le search cherche dans la table categories.
Actuellement, mes catégories s'affichent toutes, quelque soit les mots clés entrés...

Peut on m'aider Svp ?

Voici mon code :
<?php
/*
* categories : Table des catégories qui peuvent etre reliées à des articles
* articles : Table des articles
* categories_jointes_articles : Table pivot (qui a comme champs id_article et id_categorie)
*
* SQL :
* _récupérer liste des catégories selon mots clés entrés dans search, et nombre d'articles par catégories :
* SELECT champs de la table categories
* , et COUNT le nombre de articles.id  (dans les parenthèses du count mettre (articles.id) au lieu de (*), servira à récup WHERE statut articles = 1 (publiés))
* FROM table categories
* JOIN table categories_jointes_articles
*   sur categories.id est = à categories_jointes_articles.id_categorie
*
* _count nombre d'articles par catégories uniquement WHERE articles.statut = 1 (statut publiés)
* JOIN table articles
*   sur articles.id = à categories_jointes_articles.id_article
*   AND articles.statut est = à 1   ( pour afficher aussi les catégories qui ne sont pas reliées à des articles where statut = 1)
*/
$sql = "SELECT categories.id, categories.nom
    , COUNT(articles.id) as nb_articles
    FROM categories
    LEFT OUTER JOIN categories_jointes_articles
        ON categories.id = categories_jointes_articles.id_categorie
 
    LEFT OUTER JOIN articles
        ON articles.id = categories_jointes_articles.id_article
        AND ".$tablePosts.".statut = ?";
 
$sql .= " AND categories.nom LIKE ? ";     // c'est cette ligne que je ne sais pas où mettre
 
$sql .= " GROUP BY categories.id, categories.nom";
 
$requete = self::getDb()->prepare($sql);
 
$requete->bindValue(1, 1, PDO::PARAM_INT);
$requete->bindValue(2, '%'.$mots.'%', PDO::PARAM_STR);
$requete->execute();
$requete->setFetchMode(PDO::FETCH_OBJ);
return $requete;

Merci beaucoup.
A voir également:

1 réponse

DelNC Messages postés 2234 Date d'inscription samedi 25 octobre 2014 Statut Membre Dernière intervention 22 février 2020 2 002
15 oct. 2015 à 03:48
Bonjour

Si on veut mettre une variable recupérée il faut faire comme çà


$sql .= " AND categories.nom LIKE ''%$variable%";

NB les % servent dans le cas où il est possible d'avoir du text/chiffre avant ou après.
0