我正在尝试在文本字段中对catid号进行mysql搜索(在php中)。我目前正在使用LIKE,但我需要它更具体。这是我的代码:
SELECT * FROM articlepix
WHERE published = 1 AND catid LIKE '%86%'
ORDER BY RAND() LIMIT 1
^^我正在寻找catid字段中的数字86,但我希望它只能查找86,目前它也用数字186取出数据。
上面的例子抓住了catid为“91,107,36,139,146,168,186”的字段。
是否可以仅搜索'86'而不是包含%86%的所有内容?如果这有意义吗?
答案 0 :(得分:4)
MySQL可以帮助您使用函数FIND_IN_SET
解决这个巨大的数据库设计错误。试一试:
SELECT * FROM articlepix
WHERE published = 1 AND FIND_IN_SET('86', catid) > 0
ORDER BY RAND() LIMIT 1
当然可以简化为:
WHERE published = 1 AND FIND_IN_SET('86', catid)
由于该函数仅在没有匹配时返回0
,但可能更难理解它的作用:)