![](/img/trans.png)
[英]Any known javascript/php dictionaries like 'word1', 'word2'?
[英]SQL - SELECT in string WHERE LIKE word1,word2,etc
我的sql查询中有一个issu。 对于MySQL中的每个id,有1个或多个标签。 例如,id 1在他的标签列中包含“ 110,2,3”。 ID 2为“ 3,1100”。 等等...标签字符串中的每个数字都是一个组。 我需要从特定组中选择用户。
所以我试图在SQL中使用LIKE运算符:
$query = $db->prepare(
"SELECT * FROM USERS WHERE taglist LIKE :id_groups OR :id_groups2 OR :id_groups3"
);
$query->execute([
"id_groups"=> $id_groups.",%",
"id_groups3"=> "%,".$id_groups,
"id_groups2"=> "%,".$id_groups.",%"
]);
但是没有按我希望的那样工作。 例如,如果我用上面的示例将$ id_groups替换为“ 3”。 即使id 1的标签中包含“ 3”,也只会选择id 2,而不是id 1。
最后一个问题是当字符串中只有1个数字时我该怎么办? 如果我添加另一个带有“ id_groups4” => $ id_groups的OR,即使我不在该组中,也会返回我所有用户。
您需要为每个OR传递一个字段:
$query = $db->prepare("SELECT * FROM USERS WHERE taglist LIKE :id_groups OR taglist LIKE :id_groups2 OR taglist LIKE :id_groups3");
$query->execute([
"id_groups"=> $id_groups.",%",
"id_groups3"=> "%,".$id_groups,
"id_groups2"=> "%,".$id_groups.",%"
]);
请注意,此用例并不涵盖单个标签,因为它希望每个标签都在逗号之前或之后,因此您确实需要:
$query = $db->prepare("SELECT * FROM USERS WHERE taglist = :id_groups OR taglist LIKE :id_groups1 OR taglist LIKE :id_groups2 OR taglist LIKE :id_groups3");
$query->execute([
"id_groups"=> $id_groups,
"id_groups1"=> $id_groups.",%",
"id_groups3"=> "%,".$id_groups,
"id_groups2"=> "%,".$id_groups.",%"
]);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.