php - SQL - 在字符串中选择 WHERE LIKE word1、word2 等

标签 php mysql sql

我的 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/

相关文章:

php - MySQL:向当前用户显示帖子提要和帖子喜欢

mysql - 不寻常的连接形式

javascript - jqGrid - PHP,如何将编辑的数据保存到服务器(MySQL)

mysql - 如何在 MySQL 中使用自定义逻辑 IF 语句比较两列之间的值

mysql - SQL查询如何选择数据即使WHERE子句中的条件不匹配

php - 计算特定日期(mysql-php)中的特定值的最简单方法是什么?

java - 在一个 PHP 中,android 尝试发送多种 json 格式,但只收到一种。我应该怎么办?

MySQL JOIN 两张表(联合)

javascript - 文本字符串值发布到另一个页面的输入字段

php - Laravel 5.5 查询生成器其中Raw不返回结果,但原始SQL返回结果