我有一个包含以下列的表: 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)
此查询有效,但我需要做的只是返回一个结果,如果user_id
与每个ref_id
匹配。
为了用另一种方式说出来,我需要找出是否有user_id
购买了每个ref_id
值。
答案 0 :(得分:0)
您可以在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
希望有所帮助!