一个MySql查询按标签过滤结果并返回结果使用的所有标记的列表

时间:2015-05-05 13:07:31

标签: php mysql

我试图弄清楚是否可以将两个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)的结果,以及第二个查询中的一个标记数组(或列表我可以制作成数组)。

非常感谢任何见解或建议。谢谢!

0 个答案:

没有答案