我的 sql 查询有问题。 MySQL 中的每个 id 有 1 个或多个标签。 例如,id 1 在其标签中具有“110,2,3”列。 id 2 为“3,1100”。 ETC... 标签字符串中的每个数字都是一个组。 我需要从特定组中选择用户。
所以我尝试在 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 个数字时我该怎么办? 如果我添加另一个 OR 与 "id_groups4"=> $id_groups ,它会返回所有用户,即使他们不在该组中。
最佳答案
您需要通过每个 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.",%"
]);
关于php - SQL - 在字符串中选择 WHERE LIKE word1、word2 等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44458426/