页面上有过滤器,用户可以在其中选择任意数量的标记。这些标记是按分类法分组的。在使用这种筛选器时,所选的文章必须至少有一个从每个选定的分类法中选择的标记。我相信(为了简单起见,我们可以这么说)我们必须在不同的分类法和操作符之间选择标记,在一个分类法中为标记选择OR操作符。

我的桌子结构:
分类法字段: id
标记字段: id,tax_id
文章字段: id
ArticlesTags字段: id、tag_id、article_id
我可以使用什么MySQL查询或查询来获取带有这些过滤器的文章?
发布于 2014-09-19 14:12:14
我在两个查询中完成了这个任务。
从过滤器的选择,我们可以得到分类和标签的id。
首先,我们制作了临时表,在其中,我们根据每一篇文章的分类对标记进行分组。
CREATE TEMPORARY TABLE IF NOT EXISTS mem_table ( INDEX(article_id) ) ENGINE=MEMORY AS
(
SELECT articletags.article_id, articletags.tag_id, tags.tax_id
FROM aricletags
LEFT JOIN tags
ON articletags.tag_id=tag.id
WHERE articletags.tag_id IN (sel_tag1_id, sel_tag2_id, sel_tag3_id...)
GROUP BY article_id, tax_id"
);第二,我们按分类法在临时表中搜索,每一篇文章都必须有与我们在过滤器中选择的分类组一样多的行。
SELECT articels.id
FROM articles
INNER JOIN mem_table
ON mem_table.article_id=article.id
WHERE mem_table.tax_id IN (sel_tax1_id, sel_tax2_id, sel_tax3_id...)
GROUP BY article.id
HAVING COUNT(article.id) = sel_taxonomy_counthttps://stackoverflow.com/questions/25930604
复制相似问题