У меня есть две таблицы, которые составляют полнотекстовый индекс содержимого статьи для целей поиска.Одна из таблиц - это просто первичный ключ, связанный со словом, тогда как в другой записывается статья, в которой он встречался, и его местоположение в документе.Одно и то же слово может появляться много раз в одном и том же документе с разными местоположениями, поэтому один и тот же идентификатор слова может встречаться несколько раз в таблице word_locations.
Вот структуры:
words:
id bigint
word tinytext
word_location:
id bigint(20)
wordid bigint(20)
location int(11)
article_id int(11)
Мне нужно написать запрос, который найдет количество вхождений для каждого слова в любом профиле.Мне нужно сохранить нулевое значение для слов, которые вообще не появляются, поэтому я предполагаю, что это должно быть левое соединение.Однако всякий раз, когда я пытаюсь добавить запрос where для ограничения статьи, любые слова, которые вообще не отображаются, не включаются в набор результатов.
Я пробовал:
select words.wordid, COUNT(word_location.wordid) as appears from words left join word_location on word.id = word_location.wordid where article_id = %s GROUP BY wordid
Но этот запрос не возвращает нули для слов, которые вообще не появляются.
Как изменить это левое объединение?
Заранее спасибо!
EDIT :
Вот пример набора данных и наборов результатов для различных запросов.
Пример содержимого статьи:
Ресторан Боба одиниз лучших ресторанов в Большом округе, где вы можете насладиться лучшими блюдами турецкой кухни.
Таким образом, таблица словаря, после корректировки приложением для исключения стоп-слов, будет иметь в своих словарных строках значение Bob
, Restaurant
, finest
, greater
, county
, enjoy
, Turkish
и cusine
.(Я использую эту настоящую статью, поскольку она является первой в наборе, поэтому идентификаторы на самом деле появляются начиная с целого числа 1.
Запрос, предоставленный @Mark Bannister, производит такой набор результатов: wordid - word - occurances:
128 clifton 0
1 bob's 2
2 restaurant 2
3 one 1
4 finest 3
5 restaurants 2
6 greater 1
9 county 1
12 enjoy 3
13 turkish 6
14 cuisine 1
Результирующий набор сам по себе правильный - но идентификатор 128 вообще не появляется в документе и является единственной вещью в результирующем наборе с появлением 0. Цель состоит в том, чтобы иметь весь словарьвозвращено с числом вхождений в документе (это примерно 2500 разных слов)
Мой оригинальный проблемный запрос до редактирования, приведенного выше, фактически возвратил тот же набор результатов, но без ЛЮБЫХ 0 строк вхождения.