我正在尝试选择效率最高的唱片。每个记录都有一个id,upvotes(int)的数量和MySQL数据库中downvotes(int)的数量。
我知道基本更新,选择,插入查询,但我不确定如何形成如下所示的查询:
SELECT *
FROM topics
WHERE MAX(topic.upvotes - topic.downvotes)
答案 0 :(得分:3)
可能有超过1条记录符合该条件。为了得到它们,你可以在mysql中做这样的事情:
SELECT *
FROM topics
WHERE upvotes - downvotes = (select MAX(upvotes - downvotes) from topics)
答案 1 :(得分:2)
SELECT (upvotes-downvotes) AS NetVotes, *
FROM topics
ORDER BY NetVotes DESC LIMIT 1
答案 2 :(得分:2)
您没有使用MAX()。
这是非常快的查询:
SELECT id, (upvotes - downvotes) AS popular
FROM topics
ORDER BY popular DESC LIMIT 1
要运行更新:
UPDATE topics,
(here you put your select statement from above in parenthesis ) AS popular_query
SET topic.description = "I'm popular"
WHERE topics.id = popular_query.id
我刚把它放在一张有250,000条记录的桌子上(它非常相似 - 库存使用情况 - 寻找最受欢迎的部分)并且耗费了.203秒 - 在我的开发机器上 - 这甚至不是生产服务器(其中它tppl 0.016秒;
<强>更新强>
是的,我没想到你可能有多个顶级成绩的可能性。
SELECT GROUP_CONCAT(id) AS popular_ids, (upvotes - downvotes) AS popular
FROM topics
GROUP BY popular ORDER BY popular DESC LIMIT 1
popular_ids - 将包含常用记录作为文本字段,如果需要,可以轻松解析。
答案 3 :(得分:1)
这是否适合你呢?
SELECT *
FROM topics
ORDER BY topic.upvotes - topic.downvotes DESC
LIMIT 1;