我的SQL结果排序日期和应用标准

时间:2014-05-21 10:40:39

标签: php mysql sorting pagination

我想对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

等时间戳中

1 个答案:

答案 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 BYCOUNT()等功能进行聚合查询,否则

SUM()无效。如果您尝试使用它进行排序,从MySQL获得奇怪的结果。

最后,SQL中的“排序”和“顺序”没有区别。排序和排序是一回事。在普通的ORDER BY子句中,您可以命名一个或多个列或派生值。例如,您可以说

 ORDER BY date DESC, title ASC

这将按日期排序所有内容,并显示最先显示的最新日期。然后,当项目具有相同的日期时,它将通过按标题排序来消除歧义。你这样做:

ORDER BY $orderby $sortby, date DESC

只要$orderby是列的名称而$sortbyDESCASC,您所拥有的就应该有效。