2023年2月7日 作者 zeroheart

chatgpt注册体验

Java QuickSort Algorithm (openai.com)

mysql中,有张表A有字段假设叫userIds,存的是用户id的列表,如 1, 12, 13 select a.* from A a where a.userIds like ‘%1%’,会把含12,13的也查出来,有什么好的方法吗

如果要避免使用 LIKE 语句带来的问题,可以使用如下解决方案:

  1. userIds 列拆分成多行,每行对应一个用户 ID,并建立新表存储这些数据。
  2. 在新表中查询匹配的用户 ID。
  3. 将结果合并到原始表中。

以下是拆分后的表结构:

sqlCopy codeTable A_UserIds
+----+-------+
| id | userId|
+----+-------+
|  1 |     1 |
|  2 |    12 |
|  3 |    13 |
+----+-------+

然后,您可以使用以下语句查询相关数据:

SELECT a.*
FROM A a
JOIN A_UserIds au
ON a.id = au.id
WHERE au.userId = 1;

该语句将只查询含有用户 ID 为 1 的行,而不会查询其他用户 ID。

如果不进行拆分,有办法查询吗

如果不拆分 userIds 列,您可以使用以下语句查询相关数据:

SELECT a.*
FROM A a
WHERE concat(',', a.userIds, ',') like '%,1,%';

该语句通过在 userIds 列的两侧添加逗号,确保匹配只在单独的用户 ID 上进行,而不会对其他用户 ID 进行匹配。

如果您使用的是 MySQL 8.0 或更高版本,您还可以使用正则表达式进行查询:

SELECT a.*
FROM A a
WHERE a.userIds regexp '[[:<:]]1[[:>:]]';

该语句仅返回与指定的用户 ID 匹配的行。