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

标签 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)

此查询有效,但我需要做的只是在存在与每个 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/

相关文章:

php - 如何根据连接数组的值选择 INNER JOIN 表的列

mysql - mysql比较varchar到datetime

mysql - 为什么我不能从表中删除这个外键?

php - 从重复 ID 具有相同父键的表创建多维数组

mysql - Yii 1.15 ORM - SHOW 语句太多

mysql - 定期从远程数据库拉取数据到本地

MySql select 语句获取每个 client_id 的最新行

php - 在发布 php 后将表单字段更改为选定

mysql - 插入另一个表时比较两个不同表中的值 'middle table'

mysql - 无法从空表中截断外键约束中引用的表