我遇到了SQL查询问题。我正试图在两次约会之间以有序的方式获取数据。以下是我遇到问题的代码的简化:
$query = "SELECT Name DateTime FROM table1";
$query .= " ORDER BY DateTime ASC";
$query .= " WHERE DateTime between date1 AND date2";
$result = mysql_query($query);
//fetch data here
while($row = mysql_fetch_array($result))
{
$output[] = $row;
}
print(json_encode($output));
当我注释掉这一行时,上面的代码就起作用了:$query。="ORDER BY DateTime ASC";
我可以更正什么以便返回两个日期之间的排序数据?
编辑:当我将ORDER移到WHERE之后时,$output现在不应该排序吗?我将其返回到安卓应用程序,但情况似乎并非如此。
$query = "SELECT Name DateTime FROM table1";
$query .= " WHERE DateTime between date1 AND date2";
$query .= " ORDER BY DateTime ASC";
条款的一般顺序是:
SELECT
FROM
WHERE
GROUP BY
HAVING
ORDER BY
您的查询几乎是正确的,但ORDER BY
子句必须在WHERE
之后。
将其更改为:
$query = "SELECT Name DateTime FROM table1";
$query .= " WHERE DateTime between date1 AND date2";
$query .= " ORDER BY DateTime ASC";
$result = mysql_query($query);
//fetch data here
while($row = mysql_fetch_array($result))
{
$output[] = $row;
}
print(json_encode($output));
问题在于查询中元素的顺序:ORDER
部分应该在WHERE
部分之后。
例如,请参阅MySQL SELECT
语法的文档:
SELECT
[ALL | DISTINCT | DISTINCTROW ]
[HIGH_PRIORITY]
[STRAIGHT_JOIN]
[SQL_SMALL_RESULT] [SQL_BIG_RESULT] [SQL_BUFFER_RESULT]
[SQL_CACHE | SQL_NO_CACHE] [SQL_CALC_FOUND_ROWS]
select_expr [, select_expr ...]
[FROM table_references
[WHERE where_condition]
[GROUP BY {col_name | expr | position}
[ASC | DESC], ... [WITH ROLLUP]]
[HAVING where_condition]
[ORDER BY {col_name | expr | position}
[ASC | DESC], ...]
[LIMIT {[offset,] row_count | row_count OFFSET offset}]
[PROCEDURE procedure_name(argument_list)]
[INTO OUTFILE 'file_name' export_options
| INTO DUMPFILE 'file_name'
| INTO var_name [, var_name]]
[FOR UPDATE | LOCK IN SHARE MODE]]
将ORDER BY放在查询的末尾
$query = "SELECT Name, DateTime FROM table1";
$query .= " WHERE DateTime between date1 AND date2";
$query .= " ORDER BY DateTime ASC";
您可以使用where条件进行选择,然后对结果进行排序。所以在查询的末尾放置订单