У меня есть следующая схема MYSQL:
CREATE TABLE IF NOT EXISTS 'tag' (
'id' SMALLINT UNSIGNED NOT NULL,
'tag' VARCHAR(15) NOT NULL,
FULLTEXT INDEX('tag'),
PRIMARY KEY ('id','tag')
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO 'tag'('id','tag') VALUES
('1','motor'),
('2','motor');
Я хочу выбрать строки из таблицы tag
сгруппированных по столбцу tag
. Я выполнил следующую команду:
SELECT COUNT(id),tag FROM tag
GROUP BY tag
Ожидаемый результат:
COUNT(id) | tag
------------------
2 | motor
Фактический результат: no rows returned
Если я FullText
индекс FullText
из таблицы, результаты вернутся, как ожидалось. Я не знаю, что происходит неправильно при использовании fulltext
с group
Обновление. С дальнейшими исследованиями проблема, похоже, связана с составным первичным ключом. Если я переключусь на одноколоночный первичный ключ, запрос снова будет работать, но мне нужно использовать составной ключ для этой таблицы, так как один и тот же идентификатор может иметь несколько тегов.
Я создал скрипт SQL для вас: http://sqlfiddle.com/#!9/1f765d/1/0
Наконец, обнаружил проблему. У двигателя есть 2 индекса на выбор при выполнении запроса, который в конечном итоге не используется вообще и не возвращает никаких результатов.
Это очень вероятно, что это ошибка. Это случай, когда FORCE INDEX
пригодится в качестве обходного пути.
Итак, окончательная рабочая команда:
SELECT COUNT(id),tag FROM tag
FORCE INDEX(PRIMARY)
GROUP BY tag
И это скрипка с обновленным кодом: http://sqlfiddle.com/#!9/a8568/21/0
Спасибо всем!