选择字段名称中的一个值出现在多行中的行

Posted

技术标签:

【中文标题】选择字段名称中的一个值出现在多行中的行【英文标题】:Select rows where one value in field name occured in multiple rows 【发布时间】:2019-01-17 06:13:56 【问题描述】:

假设我有一个这样的数据库结构。

users

id    name    
1     Name1   
2     Name2   
3     Name3   
4     Name4   

还有一张桌子logs

id    userid
1     1
2     1      
3     2
4     3
5     3
6     3
7     4
8     4
9     4

现在,如果我在文本框中输入 3 并按提交,然后在服务器端 php 我需要使用 id 3 和 4 从 users 表中获取并显示记录,即 users 表中的 Name3 和 Name4 为在logs 表中,它们各出现了 3 次。同样,如果我按 2 并提交,它应该从 users 表中获取并显示记录 Name1 并显示为 users 1 在日志表中发生了 2 次。这里应该查询什么?我不明白如何开始,所以我无法发布我尝试过的内容。请帮忙。

【问题讨论】:

【参考方案1】:

试试这个查询,它正在工作

select name from users where id in (select userid from logs  group by userid having count(userid) = '".$inputvalue."')

DEMO LINK

【讨论】:

它将统计所有未分组用户的userid列。 我最喜欢的答案。您从 users 表中选择名称并具有它所属的条件:在 WHERE 子句中。 @SayedMohdAli 您稍后对其进行了编辑并在子查询中添加了 group by ...现在显然没问题 完全按照我的意愿工作。谢谢。【参考方案2】:

按用户分组,只取那些具有您输入的记录数的组

select u.name
from users u
join logs l on l.userid = u.id
group by u.name
having count(l.id) = $inputValue

Demo

【讨论】:

Group by 需要在“l.userid”上,显然,您必须更改选择列表。所以重建查询。 不,它没有。 @Muhammad Waheed:如果 name 在 users 表中不是唯一的,那就太奇怪了。如果是这样,那么请求的查询结果将变得毫无意义,因为如果两个用户名称相同,我们将不知道它是哪一个。 (此外:即使我们按id 分组,我们仍然可以选择name,因为后者在功能上依赖于前者。) @juergend 现在你明白了吗? Thorsten 你是对的 @Muhammad Waheed:嗯,...实际上,我所说的是支持 juergen d 的声明,而不是你的。【参考方案3】:

这对你有用。

Select u.name 
from ( select userid,count(*) as NoOfRecords 
       from logs 
       group by userid 
       having count(*) = $inputvalue ) as a
inner join users u on a.userid = u.id

【讨论】:

以上是关于选择字段名称中的一个值出现在多行中的行的主要内容,如果未能解决你的问题,请参考以下文章

MySQL - 如何选择表中的行,其中 id 值位于另一个表中的逗号分隔字段中?

按列分组并选择具有多个最小值的行中的所有字段

怎么根据一个表的字段值修改另一个表的字段值

基于R中的行名合并数据框

怎样设置mysql中的数据字段为默认值

如何用arcgis修改shp数据字段名称