我有一个包含以下各列的表:
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
。 最佳答案
您可以在MySQL中使用group_concat函数,例如:
select user_id, group_concat(ref_id) from log group by user_id
这将为您提供每个user_id的逗号分隔的ref_ids值列表。棘手的是如何将其与所需的设置进行比较。最简单,最骇人听闻的方法(如果您只是不时地手动运行此查询)是解决一堆“包含”比较问题。就像是:
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/