FIND_IN_SET返回逗號分隔的字符串中的索引,從1到N或0如果未找到。參數是FIND_IN_SET(針,乾草堆)。
我假設cute_news.category和cute_news.keywords包含逗號分隔的列表中的「37」和「45」可能是每個列表中的有效值的項目?
即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;
順便說一句,你可以如果你想要的是選擇任何匹配多個可能類別的行,使用FIND_IN_SET而不是IN(不能被參數化),用「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」)數據庫行和$ category_list是你願意接受的類別列表(「12,24,37 ,51" )。下一屆是相反的。您只想在包含關鍵字列表(「1,22,45」)的字段中找到關鍵字=「45」。 FIND_IN_SET只適用於針頭有單個物品的情況。
發佈cute_news和cute_fields表模式...和/或一些示例行。 –