我创建了一个表,其中用户以数组的形式存储。例如,在一篇博客文章中有多个用户标记
+ user_tagged_id + user_id + Status +
| 1, 4, 7 | 6 | Posted |
| 10, 6 | 1 | Posted |
| 11, 4, 1 | 1 | Posted |
| 1, 2 | 3 | Posted |
我正在使用查询来获取user_id列或user_tagged_id列中存在的用户ID的用户,但是使用LIKE它会提取与1匹配的所有id但是如果user_id我希望获得匹配的确切数字在user_tagged_id列中存在= 1,它应该只返回该行并不是全部有意义
SELECT * FROM forums WHERE (status = 'Posted' OR status = 'Reported')
AND (user_id = '1' OR user_tagged_id IN ('1')) ORDER BY id DESC LIMIT 0, 5
答案 0 :(得分:1)
要使用LIKE运算符搜索逗号分隔列表,您需要了解可能出现的不同情况:
对于示例,搜索(针)的字符串是 42 。
42
,5
或142
。要找到您要搜索的那个,您可以检查字符串是否相等:user_tagged_id = '42'
。12342
或425
- 你需要在你的病情中加入连续的逗号,但不是任何先行标志:user_tagged_id LIKE CONCAT('42', ',%')
。12342
或425
- ,前两个逗号都需要添加到LIKE条件:{ {1}} user_tagged_id LIKE CONCAT('%, ', '42', ',%')
- 前面的逗号需要成为LIKE条件的一部分:3842
要过滤特定ID的列表,您需要将所有四个条件添加为分离。
由于这是非常大量加载的,我建议你更愿意创建一个新表来保存用户标记并在查询中user_tagged_id LIKE CONCAT('%, ', '42')
。