Bonjour,
J'ai besoin d'aide pour une requête qui me pose problème.
J'explique le topo :
Une base de données avec 3 tables (en fait beaucoup plus mais les autres ne nous intéressent pas) : table actu, table categorie et table categorie_actu.
La table actu contient une liste d'actu (identifiant, titre, texte de l'actu, dates, etc... juste des infos à afficher).
La table categorie contient une liste de catégories (identifant, libelle).
La table categorie_actu fait le lien entre les 2 tables précédentes : id_actu et id_categorie. Notez qu'une actu peut appartenir à plusieurs catégories (sinon je n'aurais pas cette table et j'aurais mis un champ id_categorie directement dans ma table actu).
Et justement c'est le cas ! Au début je n'avais que 2 catégories : actu et évènement. Et je devais faire une requête pour récupérer toutes mes actus d'une catégorie ou de l'autre.
Ma requête était :
Mais j'ai changé un peu le programme. Je souhaite que certaines actus ne soient accessibles qu'à une partie privé. J'ai donc ajouter une catégorie : privé. Et lorsqu'une actu est considéré comme "privé", je l'ajoute à cette catégorie en plus de la catégorie à laquelle elle appartenait au départ.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 SELECT *, actu.id_actu "id_actu" FROM actu INNER JOIN categorie_actu ON categorie_actu.id_actu = actu.id_actu AND categorie_actu.id_cat = '1' WHERE statut_actu = '1' ORDER BY tri_actu DESC, date_modif_actu DESC
Donc maintenant, la requête ci-dessus me sers lorsque j'ai accès à la partie privé. Mais lorsque je n'y ai pas accès, je dois faire un test de plus pour exclure les actus associé à l'identifiant de ma catégorie privé (qui porte l'id_cat 3).
Dans ce dernier cas, je pensais afficher mes résultats avec :
Mais j'ai toujours la même liste (donc avec mes actus appartenant à l'id_cat 3) qui s'affiche.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 SELECT *, actu.id_actu "id_actu" FROM actu INNER JOIN categorie_actu ON (categorie_actu.id_actu = actu.id_actu AND categorie_actu.id_cat = '1' AND categorie_actu.id_actu != 3) WHERE statut_actu = '1' ORDER BY tri_actu DESC, date_modif_actu DESC
Quelle est la solution ? Et dans le but d'apprendre un peu quelle est l'erreur dans ma requête ?
Merci pour votre aide.
Partager