0

このエラーが発生しました:

SQL 構文にエラーがあります。使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。

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

$sql2 での PHP の結果

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-mysql のエラー

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
4

2 に答える 2

1

の条件で句を分割してはなりません 。MATCH (col1,col2,...) AGAINST (expr [search_modifier])idcat

最初に1つを完全に実行してから、もう1つと組み合わせます。つまり、次のいずれかです。

... 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 ...)

于 2012-10-08T16:57:54.473 に答える
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
于 2012-10-08T16:46:35.163 に答える