mysql标记系统,允许多个和重复的标记

时间:2013-02-01 22:59:26

标签: mysql sql select

我正在构建一个MySQL标记数据库,以允许用户标记产品。

我目前的设计使用这些表格:

Account
id (PK)
username

Product
id (PK)
product_name

Product_Tag
id (PK)
product_id (FK to Product)
tag_id (FK to Tag)
account_id (FK to Account)
created_date

Tag
id (PK)
tag_name

请注意,在我的设计中,我正在跟踪哪个用户标记了产品以及何时使用同一标签多次标记产品,因此我知道哪些标签最适合给定产品。

我正在尝试找出一个标记搜索查询,该查询返回最标记为搜索标记的产品。例如,如果我查询“红色礼服”,那么标记为“红色”和“礼服”的产品应该出现在结果集的顶部。使用我现有的设计可以实现哪些查询?

3 个答案:

答案 0 :(得分:1)

select max(cnt) from(
    select count(*) cnt
    from product_tag
    where tag_id = <tag id of red dress>
    group by product_id);

答案 1 :(得分:1)

此问题最像是Relational Division

SELECT  a.ID, a.ProductName
FROM    Product a
        INNER JOIN Product_Tag b
            ON a.ID = b.Product_ID
        INNER JOIN Tag c
            ON b.Tag_ID = c.ID
WHERE   a.ProductName IN ('RED','ADDRESS')
GROUP   BY a.ID, a.ProductName
HAVING  COUNT(*) >= 2
ORDER   BY COUNT(*) DESC

答案 2 :(得分:0)

试试这个:

SELECT
    P.id,
    P.product_name
FROM Product P
    LEFT JOIN Product_tag PT
        ON P.id = PT.product_id
    LEFT JOIN Tag T
        On PT.tag_id = T.id
WHERE T.tag_name = 'red'
     OR T.tag_name = 'dress'
GROUP BY P.id, P.product_name
ORDER BY COUNT(P.id) DESC

您无法使用LIMIT来获取标记最多的n个产品。