我已经制作了一个已经有效的投票脚本,但是我想练习一些MySQL来尝试通过SQL查询对结果进行排序/过滤,而不是将整个表作为数组并使用它来处理环路。
我遇到了根据投票次数对投票选项进行排序的问题。我的数据库有3个与此脚本相关的表:
vote_votes
- 其中包含投票,每投一票vote_options
- 其中包含每次投票的可能选项vote_list
- 其中包含带有标题,类型等的投票列表。我的原始脚本只使用
获得了与当前访问过的投票ID相匹配的所有选项SELECT * FROM vote_options WHERE vote_options.vid = $voteID
然后计算与数组中vote_votes
内的选项唯一ID匹配的行,然后根据具有自定义排序函数的行数对其进行排序。
我想在一个查询中做同样的事情,我认为这是可能的,我只是不知道如何做。这是我目前的SELECT
声明:
SELECT
options.optid as id,
options.value as value
FROM vote_options options
WHERE vid = {$vote['vid']};");
基本上,在vote_votes
内,每个条目都有一个唯一的entryid
和一个optid
列,我希望以这些条目计为{的方式将其添加到查询中{1}}(选项ID是唯一的,因此无需查找投票ID)。
我希望这会奏效,但这显然是错的。这是我在放弃并在这里提问之前最接近的。
WHERE vote_votes.optid = options.optid
答案 0 :(得分:0)
我找到了解决方案,只需将括号中的SELECT
移到正确的位置即可:
SELECT
options.optid as id,
options.value as value,
options.vid as voteid,
(
SELECT COUNT(*)
FROM vote_votes votes
WHERE votes.optid = options.optid
) as votes
FROM vote_options options
WHERE options.vid = {$vote['vid']}
ORDER BY votes DESC;