假设我有一个数组并且我想检查某个元素是否是该数组的一部分,我可以继续使用 in_array(needle, haystack) 来确定结果。为了我的目的,我正在尝试查看与此等效的 PHP。现在你可能对我有一个即时的答案,你可能会想说“使用 IN”。是的,我可以使用 IN,但这并不能获取所需的结果。让我用一个例子来解释:
我在数据库表中有一个名为“宠物”的列。对于记录,它有一个值:Cat, dog, Camel (是的,列数据是逗号分隔值)。假设这一行的 id 为 1。
现在我有一个表单,我可以在其中输入表单输入中的值,并使用该值检查数据库中的值。假设我在表单输入中输入以下逗号分隔值:CAT, camel (是的,CAT 是大写的,而且是有意为之,因为有些用户倾向于这样输入)。
现在,当我在表单输入中输入上述信息并提交时,我可以收集发布的信息并使用以下查询:
$search = $_POST['pets'];
$sql = "SELECT id FROM table WHERE pets IN ('$search') ";
上面的查询没有获取数据库中已经存在的行(还记得宠物列的值是 Cat, dog, Camel 的记录吗?)。我正在尝试让记录充当超集,并将表单输入中的值作为子集。所以在这种情况下,我希望 id 值显示为列中存在的值,但这并没有发生。
现在假设我只输入 CAT 作为表单输入并执行搜索,它应该会显示 ID 1 行。
现在假设我只输入 camel, cAT 作为表单输入并执行搜索,它应该会显示 ID 1 行。
我怎样才能实现上述目标?
谢谢。
最佳答案
您要找的函数是find_in_set :
select * from ... where find_in_set($word, pets)
对于多词查询,您需要测试每个词和 AND(或 OR)测试:
where find_in_set($word1, pets) AND find_in_set($word2, pets) etc
关于PHP、MySQL : mysql substitute for php in_array function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2981280/