Я работаю над созданием базовой поисковой системы в MySQL. поиск основан на ключевых словах, и каждый элемент поиска имеет ряд ключевых слов, связанных с ним. Каждое ключевое слово имеет вес, связанный с ним, чтобы определить, насколько «важно» ключевое слово для элемента. Таблицы выглядят так:
== table: keyword_item ==
column: item_id (int)
column: keyword (varchar)
column: weight (float)
== table: item ==
column: id (int)
column: title (varchar)
column: url (varchar)
Что я хочу сделать, это отфильтровать элементы, у которых достаточно большая сумма весов, и я попробовал следующий запрос:
SELECT item_id, title, url, sum(weight) as w FROM keyword_item INNER JOIN item ON (w > 3 AND (keyword = 'key1' OR keyword = 'key2' OR keyword = 'key3' ) AND item_id = id) GROUP BY item_id ORDER BY w DESC
Но это дает мне ошибку:
#1054 - Unknown column 'w' in 'on clause'
Я также попытался изменить "w> 3" в предложении ON на "sum (weight)> 3", но тогда я получаю ошибку:
#1111 - Invalid use of group function
Теперь, я не очень много знаю о MySQL, и я уверен, что есть совершенно хорошее объяснение, почему это не работает, но я хотел бы знать, есть ли способ достичь того, что я хочу.
Спасибо!