Je rencontre un problème avec la recherche de lignes de base de données connexes qui ne sont pas spécifiquement liées. Disons que nous avons 5 tables.Recherche d'une liste dans une liste
Products
Id | name
Product_tags
Id | product_id | tag_id
Tags
Id | name
Blog
Id | name
Blog_tags
Id | blog_id | tag_ids
Alors ce que je fais est que je prends un produit, avec cette saisir les balises de ce produit a par la table Product_tags. Dis que je reçois quelque chose comme ça.
Product 101
Tags 123,124,125,126
Maintenant j'ai cette page de produit. La chose est, maintenant je veux trouver un blog s'il correspond à ce produit, mais il n'a pas besoin d'avoir tous les tags que ce produit a, le produit a juste besoin d'avoir tout ce blog a. Donc, si le blog a des balises 124 et 126, il doit correspondre. Actuellement, je sauvegarde tous les tags d'un blog sur une ligne (séparés par des virgules) mais cela peut être changé pour économiser 1 tag par ligne si nécessaire. Si c'était inversé je pourrais le faire mais j'ai besoin de vérifier une liste partielle dans une table différente.
Product 101
Tags 123,124,125,126
Should find
Blog 201
Tags 124,126
But not
Blog 202
Tags 120,124
J'ai essayé quelques façons, mais je ne pouvais pas trouver un moyen de faire ce travail, ma tentative la plus proche était un inverse comme comme celui-ci.
select * from Blog_tags where "'".implode(",",$tagIds)."'" LIKE concat("%", tag_ids, "%")
Ce tri de travail mais pas lorsque le produit avait 1,2,3 et le blog n'avait 1,3.
Si je comprends votre problème correctement: vous avez une liste des balises (de produits), et que vous voulez trouver les blogs dont les étiquettes sont ** ** tous inclus dans ce liste, et qui ont ** au moins ** une étiquette? Est-ce exact? – rlanvin
Oui. Tous les tags de blog doivent être présents dans la liste des tags de produit, mais la liste des tags de produit peut contenir des tags supplémentaires qui ne sont pas présents dans la liste des blogs. – xStoryTeller