Alors je vous explique mon souci.
Je développe une modification pour mon backoffice perso. Le client veut qu'un article ai plusieurs catégories et plusieurs sous catégories possibles.
Mes catégories 1 sont les régions de France et mes catégories 2 sont les activités.
Donc un magasin peut être dans plusieurs régions et aussi dans plusieurs activités
J'ai donc ma table "categories" où sont enregistrées les données des cat1 cat2 (mais pas besoin de vous expliquer cette table car je ne m'en sert pas dans l'exemple).
La table principale "articles" (je mets le minimum de champs pour être clair)
id, titre, texte
Et ma table "articles_categories" qui est jointe par l'id à celle des "articles"
id, idart, cat1, cat2,
(cat1 correspond à la catégorie 1 et cat2 à la catégorie 2. Exemple cat1: Région Paca, cat2:Fleuriste mais avec les id bien sûr)
Donc jusque là aucun souci, il me suffit de faire une jointure de "articles.id" à "categories.idart" puis de filtrer avec la recherche de catégories.
J'ai simulé cela dans mon exemple en rajoutant une recherche fixe avec $cat1_sel et $cat2_sel.
Donc ça marche très bien !$table_art = "articles" ;
$table_categories = "categories" ;
$cat1_sel = "1";
$cat2_sel = "5";
$sql = "SELECT * FROM $table_art ";
$sql .= " INNER JOIN $table_categories ON $table_art.id = $table_categories.idart";
$sql .= " WHERE $table_categories.cat1_art = $cat1_sel";
$sql .= " AND $table_categories.cat2_art = $cat2_sel";
$sql.= " ORDER BY $table_art.id";
$req = mysqli_query($conn, $sql);
$res = mysqli_num_rows($req);
echo $res." Resultat(s)<br>";
if ($res != 0) {
while($data=mysqli_fetch_array($req)) {
echo $data["titre"]."<br>";
}
}
Cependant si je veux lister simplement les articles de la cat1
en supprimant
Etant donné que mes articles on parfois une autre catégorie 2 associée, je vais me retrouver avec plusieurs résultats !$sql .= " AND $table_categories.cat2_art = $cat2_sel";
Alors ma question, comment n'avoir qu'un seul résultat en demandant d'afficher simplement si l'id de l'article est trouvé dans la jointure ?
C'est à dire un peu comme un IN_ARRAY Mais via une jointure et dans une requête SQL (obligatoirement pour que ce soit plus propre, facile à compter et à utiliser avec mes autres scripts).
Merci par avance,
J'espère que j'ai bien expliqué mon souci.