2023年2月7日
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
语句带来的问题,可以使用如下解决方案:
- 将
userIds
列拆分成多行,每行对应一个用户 ID,并建立新表存储这些数据。 - 在新表中查询匹配的用户 ID。
- 将结果合并到原始表中。
以下是拆分后的表结构:
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 匹配的行。