ORDER BY来自不同表的具有相同选项ID的行数

时间:2014-08-29 23:49:23

标签: mysql sql sql-order-by

我已经制作了一个已经有效的投票脚本,但是我想练习一些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

1 个答案:

答案 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;