2012-10-08 40 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