繁体   English   中英

SQL-在WHERE LIKE字串word1,word2等中进行SELECT

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM