FIND_IN_SET возвращает индекс в строке, разделенной запятой, от 1 до N или 0, если не найден. Аргументами являются FIND_IN_SET (игла, стог сена).
Я предполагаю, что cute_news.category и cute_news.keywords содержат список предметов, из которых «37» и «45» могут быть допустимым значением в каждом списке?
i.e. FIND_IN_SET ('37', cute_news.category), где cute_news.category для соответствующей строки может содержать значение «25,45,37,19». Матч начинается в положении 7.
Как написано, вы ищете категории, не содержащие 37 и слова, не содержащие 45.
Что вы хотите:
SELECT cute_news.title, cute_news.id, cute_news.keywords, cute_fields.post_id, cute_fields.alternate_url
FROM cute_news, cute_fields
WHERE cute_news.id = cute_fields.post_id AND
FIND_IN_SET ('37',cute_news.category) > 0 AND
FIND_IN_SET ('45',cute_news.keywords) > 0;
Кстати, вы можете напишите сохраненную процедуру с помощью списка «IN» в качестве параметра, используя FIND_IN_SET вместо IN (который не может быть параметризован), если вы хотите выбрать любые строки, соответствующие нескольким возможным категориям.
DELIMITER $
DROP PROCEDURE IF EXISTS sp_GetAllPostsByCategoriesWithKeyword$
CREATE PROCEDURE sp_GetAllPostsByCategoriesWithKeyword(
in $category_list VARCHAR(1000),
in $keyword VARCHAR(100)
)
BEGIN
SELECT cute_news.title, cute_news.id, cute_news.keywords, cute_fields.post_id, cute_fields.alternate_url
FROM cute_news, cute_fields
WHERE cute_news.id = cute_fields.post_id
AND FIND_IN_SET (cute_news.category, $category_list) > 0
AND FIND_IN_SET ($keyword, cute_news.keywords) > 0
END $
DELIMITER ;
выше предполагает, что cute_news.category поле содержит одну категорию (например: «37») в строке Db и $ category_list список категорий вы хотите принять ("12,24,37 , 51"). Следующий термин - противоположный. Вы хотите найти ключевое слово = «45» в поле, которое содержит список ключевых слов («1,22,45»). FIND_IN_SET работает только тогда, когда у вас есть отдельный предмет для иглы.
Опубликуйте схемы таблиц cute_news и cute_fields ... и/или некоторые образцы строк. –