2012-10-08 42 views
0

選擇MySQL的我得到這個錯誤:故障與PHP

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'and idcat = 00 OR idcat = 11 OR idcat = 4 OR idcat = 8 OR idcat = 10 OR idcat ' at line 6

我試圖做PHP

SELECT *, 
     MATCH (name,description) AGAINST ('key') AS relevancia 
    FROM offer 
    WHERE 
     MATCH (name,description) 
      and idcat = 00 
      OR idcat = 11 
      OR idcat = 4 
      OR idcat = 8 
      OR idcat = 10 
      OR idcat = 5 
      OR idcat = 7 
      OR idcat = 1 
      OR idcat = 2 
      OR idcat = 3 
      OR idcat = 6 
      OR idcat = 9 
     AGAINST ('key') 
    ORDER BY discount DESC 
    LIMIT 0, 15 

此查詢但是,如果我嘗試做這個查詢直接在phpmyadmin的,它工作正常。所以我不知道爲什麼PHP不起作用,如果它是相同的諮詢。

順便請原諒我可憐的英語。

編輯:

這是PHP會診

$sql2 = "SELECT *, 
MATCH (name,description) 
AGAINST ('$search') 
AS relevancia 
FROM offer 
WHERE MATCH (name,description) AGAINST ('$search') 
and $wheres $order $limit"; 

echo $sql2; 
mysql_query("".$sql2."") or die (mysql_error()); 

在PHP-MySQL在$ SQL2

SELECT *, MATCH (name,description) AGAINST ('key') AS relevancia 
FROM offer 
WHERE MATCH (name,description) AGAINST ('key') 
and idcat IN(00, 11, 4, 8, 10, 5, 7, 1, 2, 3, 6, 9) 
ORDER BY discount DESC LIMIT 0, 3 

錯誤的PHP結果

You have an error in your SQL syntax; 
check the manual that corresponds to your MySQL server version for the right syntax to 
use near 
'idcat IN(00, 11, 4, 8, 10, 5, 7, 1, 2, 3, 6, 9) ORDER BY discount DESC' at line 5 

回答

1

試試這個:

SELECT *, concat (name, relevance) AS relevancia 
FROM offer 
WHERE MATCH (name,description) AGAINST ('key') 
and (idcat = '00' 
OR (idcat > 0 
and idcat<=11)) 
ORDER BY discount DESC LIMIT 0, 15 
+0

如果您認爲'idcat'是一個字符串類型,就像'='00''那樣,那麼不等式('> 0'和'<= 11')將基於字典順序並可能產生不合需要結果(例如''10asgf'')。 – eggyal

1

你一定不是MATCH (col1,col2,...) AGAINST (expr [search_modifier])條款與條件對idcat分裂。

首先完成一個,然後然後與另一個結合。也就是說,無論是:

... WHERE MATCH (name,description) AGAINST ('key') AND idcat IN (00, 11, ...) 

或者:

... WHERE idcat IN (00, 11, ...) AND MATCH (name,description) AGAINST ('key') 

:我已經使用MySQL的IN運營商作爲(idcat = 00 OR idcat = 11 OR ...)的簡寫。

+0

如果'idcat = 0'匹配將返回true,...我想我們需要表結構來幫助他... – jcho360

+0

@ jcho360:取決於'idcat'列的數據類型;在任何情況下,這個答案都沒有改變OP的查詢邏輯(這是我試圖添加到你的答案中的警告)。 – eggyal

+0

yeap,我喜歡你的答案,它比我的短,但我希望ditoje給我們的表結構,以幫助他 – jcho360