0

我在 PHP 中运行一个查询,我得到了很多结果。这是查询:

mysql> SELECT `location` FROM `listings` WHERE `fulltext` LIKE '%a%' OR `title` LIKE
'%a%' AND location IN(33702,33709,33714,33716,33760,33762,33771,33773,33777,33781,33782)
ORDER BY `date` DESC \g

这是我得到的 CMD 结果,它与我在 PHP 运行中得到的完全匹配:

+----------+
| location |
+----------+
|    78787 |
|    33782 |
|    33782 |
|    98102 |
|    33782 |
|    33782 |
|    33782 |
|    33782 |
|    33782 |
|    56564 |
|    44569 |
|    33782 |
|    33782 |
+----------+
13 rows in set (0.00 sec)

如您所见,我不应该得到 78787,98102,56564 或 44569。有没有人知道查询可能有什么问题。如果您需要更多信息,请告诉我。

PS 我最初设置这个是为了使用 RLIKE,一旦我弄清楚了,它就会再次出现。

4

2 回答 2

4

看起来您的优先级OR不正确。尝试:

SELECT `location` FROM `listings` WHERE (`fulltext` LIKE '%a%' OR `title` LIKE '%a%') AND location IN(33702,33709,33714,33716,33760,33762,33771,33773,33777,33781,33782) ORDER BY `date` DESC

这里重要的是使用括号来分隔您的两个基本条件:

  1. 检查titlefulltext
  2. 检查位置
于 2013-09-19T17:18:56.987 回答
1

由于operator priority,您的查询将按如下方式处理:

SELECT `location`
FROM `listings`
WHERE `fulltext` LIKE '%a%'
  OR (
       `title` LIKE '%a%'
    AND LOCATION IN(33702,33709,33714,33716,33760,33762,33771,33773,33777,33781,33782)
  )
ORDER BY `date` DESC

我不认为这是你想要的。尝试在要导致正确评估WHERE子句的位置添加括号。

于 2013-09-19T17:21:11.210 回答