Document partagé, critères optionnels et {vu=non}
Considérons le squelette test.html
suivant :
<!DOCTYPE html>
<html lang="fr">
<head>
<title>Test</title>
</head>
<body>
<BOUCLE_photos(DOCUMENTS){id_rubrique?}{id_article?}{media=image}{vu=non}>
<br>- #ID_DOCUMENT - #VU
</BOUCLE_photos>
</body>
</html>
On appelle la page comme ceci ?page=test&id_article=123
On s'attend à obtenir les images de l'article 123 non insérées dans le texte. Il existe un cas où des images avec vu=oui
sont retournées quand même ! Il s'agit du cas ou cette image est partagée avec un autre article pour lequel vu=non
.
Le SQL généré est le suivant :
SELECT documents.id_document, L1.vu
FROM spip_documents AS `documents`
INNER JOIN spip_documents_liens AS L2 ON ( L2.id_document = documents.id_document )
INNER JOIN spip_documents_liens AS L1 ON ( L1.id_document = documents.id_document )
WHERE (documents.statut = 'publie')
AND (documents.mode IN ('image','document'))
AND (documents.taille > 0 OR documents.distant='oui')
AND (L2.id_objet = 123)
AND (L2.objet = 'article')
AND (documents.media = 'image')
AND (L1.vu = 'non')
GROUP BY documents.id_document
On voit que 2 jointures vers la table spip_documents_liens
sont générées : L1 et L2.
Il existe une jointure entre l'article 123 et L2, mais pas avec L1 sur lequel le test du champ vu
est fait...
En résumé :
- Document 1 sur Article 123 avec vu=oui
- Document 1 sur Article 456 avec vu=non
- Boucle des documents de l'article 123 avec vu=non retourne le document 1 quand même.
Modification effectuée par marcimat