Используя MySQL 5.6, этот запрос
SELECT foo
FROM bar
WHERE groupId = '1'
AND MATCH (foo) AGAINST ('"myQuery"' IN BOOLEAN MODE);
и
SELECT foo
FROM bar
WHERE groupId = '1'
AND foo like '%myQuery%';
возвращает оба правильных результата, но когда я объединяю их с:
SELECT foo
FROM bar
WHERE groupId = '1'
AND (
MATCH (foo) AGAINST ('"myQuery"' IN BOOLEAN MODE)
OR foo LIKE '%myQuery%'
);
Я получил несколько дополнительных результатов, которые не появляются ни в одном из первых двух запросов, и не содержат myQuery
вообще.
Есть ли какая-нибудь хитрость с круглыми скобками, которые я пропустил?
Или это может быть связано с каким-либо видом кэша индекса? Иногда результаты верны, а вдруг их уже нет.
Я тоже пробовал с
WHERE (
groupId = '1' AND MATCH (foo) AGAINST ('"myQuery"' IN BOOLEAN MODE)
) OR (
groupId = '1' AND foo like '%myQuery%'
);
Изменить: вот результаты моих запросов с myQuery = 'gold'
.
1 и 2 возвращаются:
"Необычное золото"
"Хорошее золото"
"Супер хорошее золото"
"Гадкое золото"
Последний возвращает:
"Карнизы алмазные"
'Custom'
"Необычное золото"
"Хорошее золото"
"Супер хорошее золото"
"Гадкое золото"
Еще одна вещь, которую я заметил, я запустил Optimize table bar
, и тогда результаты верны. Я снова запустил 1-й запрос, а затем 3-й результат больше не верен. Поэтому я действительно подозреваю, что что-то связано с полнотекстовым индексом.
Изменить 2: вот dbFiddle: https://www.db-fiddle.com/f/iSXdTK7EzfoQ46RgDX7wF3/1