我试图弄清楚是否可以将两个mysql查询合并为一个。第一个查询根据多个选定的标记返回结果。第二个查询返回数据库中使用的标记列表,按其总计数排序。
我有三张桌子,我们可以打电话给他们: - ' LIB' (包含所有图像,数据等) - ' TAGS' (包含所有可能的标记及其标记ID) - ' LIBTAGS' (包含lib中使用的所有标记的记录,包含LIB ID和TAG ID)
示例表:
LIB
---------------
id - 12345
desc - 'A description'
file - 'example.jpg'
thumb - 'exampleThumb.jpg'
TAGS
---------------
id - 3500
tag - 'exampletag'
LIBTAGS
--------------
libid - 12345
tagid - 3500
第一个查询如下所示:
SELECT from LIB l
JOIN LIBTAGS lt ON l.id = lt.libid
JOIN TAGS t ON lt.tagid = t.id
WHERE t.tag IN ('tag1', 'tag2', 'tag3') //varies with number of tags
GROUP BY l.id
HAVING count(DISTINCT t.tag) = 3 //varies with number of tags
返回包含所有搜索标签的LIB结果。
第二个查询如下所示:
SELECT lt.tagid, t.*, count(lt.tagid) AS cnt FROM LIBTAGS lt
JOIN TAGS t ON lt.tagid = t.id
GROUP BY lt.tagid
ORDER BY cnt DESC
这将返回按总计数排序的最常用标签的列表。
我的目标是将这些组合并返回标签列表(如上所述),但仅针对第一个查询的结果。可以这样做吗?
这样做的目的是允许用户通过标签缩小搜索结果,然后使用标签列表向他们展示标签,这些标签可以进一步缩小范围。
我正在寻找的输出是能够循环第一个查询(来自LIB)的结果,以及第二个查询中的一个标记数组(或列表我可以制作成数组)。
非常感谢任何见解或建议。谢谢!