我想对MySQL结果进行排序,我有一个排序导航,用户可以根据标题,日期,评级,点击等选择排序结果。
我想按它排序。
通过排序导航选择用户应用标准的第一种排序。
第二个现在显示的结果按日期降序排序。
我的表结构是这样的。
title date rating hits
Product A 2011 5 200
product B 2011 4 250
product C 2013 5 100
Product D 2014 2 125
示例如果用户选择按desc排序,则结果应该像这样
Product D 2014 2 125
product C 2013 5 100
Product A 2011 5 200
product B 2011 4 250
即显示日期desc结果来自评级desc排序结果。
我尝试过这些解决方案,但结果并不正确。
SELECT * FROM (
SELECT id, title, desc, rating, hits, date FROM $table WHERE category='$category' ORDER BY $orderby $sortby LIMIT $rpp OFFSET $offset
) AS S ORDER BY date desc
// this way result did not come sorted with date at all
SELECT * FROM (
SELECT id, title, desc, rating, hits, date FROM $table WHERE category='$category' ORDER BY $orderby $sortby LIMIT $rpp OFFSET $offset
) AS S GROUP BY date desc
// this way result did not come sorted with date at all
SELECT id, title, desc, rating, hits, date FROM $table WHERE category='$category' GROUP BY date desc, ORDER BY $orderby $sortby LIMIT $rpp OFFSET $offset
// this way some of the result come sorted with date and most of the results are not shown at all.
SELECT id, title, desc, rating, hits, date FROM $table WHERE category='$category' ORDER BY $orderby $sortby, date desc LIMIT $rpp OFFSET $offset
// this way some of the result come sorted with date.
SELECT id,title,desc,rating,hits,date FROM $ table WHERE category ='$ category'ORDER BY $ orderby $ sortby,YEAR(date)desc LIMIT $ rpp OFFSET $ offset //这样一些结果会按日期排序。
请参阅并建议任何可行的方法。
由于
更新
变量值如下。请注意这些变量一次只有一个值我向您展示了逗号分隔后的所有值。
$category = item type
$orderby = date, rating, title, id, hits
$sortby = asc, desc
$rpp = 10, 20, 30
UPDATE2
date
存储在1325894400
答案 0 :(得分:-1)
我猜你的问题是你是SQL新手。因此,我将冒险尝试通过解释您的一个查询来帮助您。如果你来到SO希望获得可以在不理解的情况下插入的代码:你来到了错误的地方。
以下是您提供格式的不正确的查询,以便查看子句。
SELECT id, title, desc, rating, hits, date
FROM $table
WHERE category='$category'
AND ORDER BY $orderby $sortby, date desc /*wrong!!*/
LIMIT $rpp OFFSET $offset
以下是解释。
下一行是错误的。不需要AND
。
AND ORDER BY $orderby $sortby, date desc
这是正确的,但很奇怪。许多程序员不在SQL中使用参数作为其表名。
FROM $table
这会导致您的查询结果限制为几行。如果您缺少数据,则需要弄清楚这里发生了什么。如果您想对结果集进行分页,以便在页面上显示(例如)20行,则需要$offset
为0,20,40,
等,LIMIT
值为20.
LIMIT $rpp OFFSET $offset
除非您使用GROUP BY
和COUNT()
等功能进行聚合查询,否则 SUM()
无效。如果您尝试使用它进行排序,将从MySQL获得奇怪的结果。
最后,SQL中的“排序”和“顺序”没有区别。排序和排序是一回事。在普通的ORDER BY
子句中,您可以命名一个或多个列或派生值。例如,您可以说
ORDER BY date DESC, title ASC
这将按日期排序所有内容,并显示最先显示的最新日期。然后,当项目具有相同的日期时,它将通过按标题排序来消除歧义。你这样做:
ORDER BY $orderby $sortby, date DESC
只要$orderby
是列的名称而$sortby
是DESC
或ASC
,您所拥有的就应该有效。