2

我正在尝试对文本字段中的 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% 的所有内容?如果这有意义吗?

4

1 回答 1

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在不匹配时返回,但可能更难理解它的作用:)

于 2012-04-16T04:08:02.333 回答