我正在用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。 有没有人看到查询可能出了什么问题。 如果您需要更多信息,请告诉我。
附言我最初设置了这个来使用 RLIKE,一旦我弄清楚了这一点,它就会再次出现。
看起来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
这里重要的是使用括号来分隔您的两个基本条件:
- 检查
title
或fulltext
- 查看位置
由于运算符优先级,您的查询将按如下方式处理:
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
子句的位置添加括号。