2014-08-29 80 views
-1

做一些SQL'ing並嘗試安排我的數據。我做了碼等,但我得到了一個#1064錯誤(語法的問題)可能會有人檢查我的代碼,並告訴我在哪裏,我錯了:)SQL錯誤代碼:#1064

$database = new connection(); 
    $database = $database->Connect("companyhouse"); 

    $statement = $database->prepare(" SELECT * 
             FROM companyhouse_23 
             ORDER BY Incorporation_Date DESC 
             WHERE 
             incorporation_date >= NOW() - INTERVAL 3 MONTH 
             AND County = 'Sussex' 
             AND County LIKE '%Sussex%' 
             "); 
    $statement->execute(); 
    $Results = $statement->fetchall(PDO::FETCH_OBJ); 

在我眼裏這一切都很好,但顯然不是誒? haha

+4

ORDER BY應該是查詢 – 2014-08-29 08:24:21

+1

另外的最後一部分,'LIKE'測試是多餘的,因爲你已經測試的'County' – 2014-08-29 08:28:14

+0

@IanRoberts的_exact_值它不是多餘的,因爲蘇塞克斯被用於東蘇塞克斯和西蘇塞克斯 – SomeAmbigiousUserName 2014-08-29 08:33:20

回答

2

您在使用Order By子句之前的子句爲Where子句。 Order By子句必須是任何查詢的最後一個子句。使其正確。

1
$statement = $database->prepare(" SELECT 
             * 
             FROM 
             companyhouse_23 
             WHERE 
             incorporation_date >= NOW() - INTERVAL 3 MONTH 
             AND County = 'Sussex' 
             AND County LIKE '%Sussex%' 
             ORDER BY 
             Incorporation_Date DESC 
             "); 
1

重新排列這樣的查詢。 ORDER BY後應WHERE

SELECT 
    * 
FROM 
    companyhouse_23 
WHERE 
    incorporation_date >= NOW() - INTERVAL 3 MONTH 
    AND County = 'Sussex' 
    AND County LIKE '%Sussex%' 
ORDER BY 
    Incorporation_Date DESC 
0
SELECT * 
FROM companyhouse_23 
WHERE incorporation_date >= NOW() - INTERVAL 3 MONTH 
    AND County='Sussex' 
    AND County LIKE '%Sussex%' 
    ORDER BY Incorporation_Date DESC 

兩件事被用來在查詢中要注意:

  1. 排序應該是查詢的最後一部分。
  2. 在你的where子句中,你使用的是縣='Susses'和縣'like%Sussex%'(這種情況只會返回縣='Sussex'的行(冗餘條款) 根據你的要求只使用一個如果精確匹配是REQD使用其他= like子句)