我有一个包含以下列的表格: id、ref、ref_id、user_id
到目前为止,我的查询如下所示:
SELECT * FROM `log` WHERE `ref` = 'purchased' AND `ref_id` in (117714,117709,139171,117710,134387,117712,118270,117715,124721,139170,117708,127060,131446,131447,117718)
此查询有效,但我需要做的只是在存在与每个 ref_id
匹配的 user_id
时返回结果。
换句话说,我需要查找是否有一个 user_id
购买了每个 ref_id
值。
最佳答案
您可以使用 MySQL 中的 group_concat 函数,例如:
select user_id, group_concat(ref_id) from log group by user_id
这将为您提供每个 user_id 的 ref_ids 的逗号分隔值列表。棘手的一点是如何将其与您想要的集合进行比较。最简单和最hacky的方法(如果您只是偶尔手动运行此查询)是处理一堆“包含”比较。像这样的东西:
select * from (
select user_id, group_concat(ref_id) as refs from log group by user_id
) a
where refs like '%117714%'
and refs like '%117709%'
... etc
您应该阅读 group_concat 的文档,看看是否可以按字母顺序对分组值进行排序,在这种情况下,您可以对值进行排序并执行以下操作:
where refs = '111,112,113,114' --numbers in alphabetical order
希望有帮助!
关于mysql - 搜索一列中与另一列(同一表)中的单个值匹配的多个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40307168/