2012-02-01 63 views
0

我有一個SQL查詢問題。我試圖在兩個日期之間以有序方式獲取數據。這裏是我有問題的代碼的簡化:ORDER和WHERE的SQL/PHP查詢

$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)); 

上述工程的代碼,當我註釋掉該行:$查詢=「ORDER BY日期時間ASC」;

我能糾正什麼,以便我可以在兩個日期之間返回有序數據?

編輯: 當我將ORDER移到WHERE之後不應該$輸出現在排序嗎?我將它返回給一個android應用程序,但似乎並非如此。

+1

您還需要一個逗號:'SELECT Name,DateTime' – 2012-02-01 20:40:08

回答

9

的ORDER BY子句來結尾:

$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 
+1

+1。同樣,查詢調用應該已經被編寫爲'$ result = mysql_query($ query)或者die(mysql_error())',至少會立即顯示語法錯誤。 – 2012-02-01 20:45:59

+1

@MarcB:當堆棧溢出時誰需要錯誤消息? ;-) – Mithrandir 2012-02-01 20:50:12

+0

對於那些喜歡錯誤信息的人來說,真的夠多了...... – 2012-02-01 20:52:13

0

您的查詢幾乎是正確的,但ORDER BY子句必須在WHERE之後。

0

更改成:

$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部分應該c在WHERE部分之後。

例如見the documentation of eg. MySQL SELECT syntax

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]] 
0

把你的ORDER BY在查詢結束

$query = "SELECT Name, DateTime FROM table1"; 
$query .= " WHERE DateTime between date1 AND date2"; 
$query .= " ORDER BY DateTime ASC"; 
0

你與你的WHERE條件,然後訂購您的結果選擇。因此,在查詢的末尾輸入order by