我使用MySQL数据库服务器,我有一个名为keywords的表,其结构如下:
kewyord_name | product_id还有一个关键字列表。我可以使用以下查询根据列表对keywords表进行排序:
SELECT *, COUNT(*)
FROM keywords
WHERE keyword_name IN (comma separated list of keywords)
GROUP BY product_id
HAVING COUNT(*) > 2
ORDER BY COUNT(*) DESC是否有一种方法可以增加关键字的权重,即某些关键字的计数(*)要增加一个以上?
发布于 2015-01-22 15:04:07
使用COUNT(*)函数,您只能在每一行中增加一个。如果希望对关键字进行不同的处理,可以在case块中使用SUM()函数。
例如,假设您有关键字This、that、these。如果您希望关键字this和that的权重为3,these为2,以及其他任何事物--权重为1,则可以这样做:
SELECT keyword_name,
SUM(CASE WHEN keyword_name IN ('this', 'that') THEN 3
WHEN keyword_name IN ('these') THEN 2
ELSE 1 END) AS weight
FROM myTable
GROUP BY keyword_name;下面是一个SQL Fiddle示例。
为了与您已经拥有的查询的设计相匹配,只需添加您的already和order子句:
SELECT keyword_name,
SUM(CASE WHEN keyword_name IN ('this', 'that') THEN 3
WHEN keyword_name IN ('these') THEN 2
ELSE 1 END) AS weight
FROM myTable
GROUP BY keyword_name
HAVING weight > 2
ORDER BY weight DESC;发布于 2015-01-22 14:55:28
如果在关键字表中添加一列“权重”,则可以使用Sum(权重)和Sum(权重)代替Count(*).
编辑:
select productid, Sum(weights.weight)
from Keywords
Join (Select 'keyword1' as keyword, 2 as weight
Union All
Select 'keyword2' , 5
Union All
Select 'keyword3', 6
) as weights
on Keywords.keyword_name = weights.keyword
group by productid
having Sum(weights.weight) > somevalue
order by weights.weight deschttps://stackoverflow.com/questions/28091614
复制相似问题