从一列中搜索与另一列中的单个值匹配的多个值(相同的表)

时间:2016-10-28 14:21:47

标签: mysql

我有一个包含以下列的表: 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值。

1 个答案:

答案 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

希望有所帮助!