【发布时间】:2016-08-02 11:50:56
【问题描述】:
我有以下名为 recordbase
的 sql 关系+----+----------+----------+
| id | 观看次数 | 姓名 |
+----+----------+----------+
| 1 | 120 | abcd |
+----+----------+----------+
| 2 | 200 | cdef |
+----+----------+----------+
| 3 | 200 | efgh |
+----+----------+----------+
| 4 | 100 | ghmk |
+----+------------+----------+
现在我想按 views 的降序显示结果。我使用以下查询来获取具有最大视图的条目:
SELECT name FROM recordbase WHERE views IN (SELECT max(views) FROM recordbase);
处理完这个 SQL 查询(在 PHP 中)后,具有最大视图的条目的 id 保存在变量 $currentid 中,其视图(即最大视图)存储在 $temp 中。为了获得进一步的降序,我可以循环以下块:
SELECT name FROM recordbase WHERE views IN (SELECT max(views) FROM recordbase WHERE views < '$temp')
$temp = views returned by above query
但这会产生问题,好像有两个条目具有相同的 views 并且是最大值,例如这里条目 2 和 3 具有相同的 views 值并且是最大值,那么输出将包括以下结果:
cdef
abcd
呸呸呸
虽然我需要以下输出:
cdef
呵呵
abcd
呜呜呜
是否有任何预定义的函数可以解决具有相同值的排序问题。? 还是我做错了,有更好的方法吗?
【问题讨论】:
-
你为什么不用
ORDER BY?很简单SELECT name FROM recordbase ORDER BY views desc -
我是 SQL 新手,一定会尝试
-
mysql或sql-server?它们不是一回事,语法也不总是一样的。
标签: php mysql sql-server optimization