通过PHP订购SQL数据库

时间:2011-10-26 17:27:30

标签: php sql

我正在尝试按日期订购数据库,但我在排序时遇到问题。数据库是通过PHP在SQL中创建的,我要用于排序的列以这种格式添加日期数据:

2011-10-26 07:10

上述日期也是'varchar'。 编辑:感谢建议

改为'datetime'

任何想法,以便我可以使用日期列对表中的行进行排序?

我制作了一个单独的脚本来缩小这个问题:

<?php
$con = mysql_connect("localhost","root","");
mysql_select_db("thoughtsdata",$con);


$order = "SELECT * 
FROM  `thoughts` 
ORDER BY  `thoughts`.`DateTime` ASC 
LIMIT 0 , 30";

if(!mysql_query($order,$con))
{
die('Could not order database: ' . mysql_error());
}


mysql_close($con);
?>

我现在在浏览器中运行此脚本时没有出现任何错误,但我的表仍然未分类:

  Edit    Inline Edit     Copy   Delete Hey sdfasdf    2011-10-26 19:41:00
  Edit    Inline Edit     Copy   Delete Hey asdfasdf    2011-10-26 07:47:00 
  Edit    Inline Edit     Copy   Delete Hey dfasdfasdf    2011-10-26 19:47:00   
  Edit    Inline Edit     Copy   Delete aaa how to sort this    2011-10-26 07:54:00 
  Edit    Inline Edit     Copy   Delete aaa any progress!!??    2011-10-26 08:13:00 
  Edit    Inline Edit     Copy   Delete oh no!  grrr    2011-10-26 08:21:00 
  Edit    Inline Edit     Copy   Delete zzTOp   thinking about sorting this out!    2011-10-27 19:12:00

在我看来发生的事情是,数据库已经排序,但它不会那样。

3 个答案:

答案 0 :(得分:1)

您可以尝试使用这样的订单子句:

ORDER BY UNIX_TIMESTAMP(fieldname) ASC

但是,如果您的字段采用YYYY-MM-DD hh:mm格式,那么alpha排序应该可以正常工作。这一切都假设您正在使用现有系统,并且不允许/不允许更改字段的数据类型。

答案 1 :(得分:1)

转换它的更好方法,例如用php,到“正常”的datetime / timestamp,然后使用sort。

这样做的主要原因是它比使用字符串排序要快得多。

答案 2 :(得分:0)

您可以将varchar转换或转换为实际的日期时间,因为它实际上是一个日期时间。