选择字段名称中的一个值出现在多行中的行
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
【讨论】:
以上是关于选择字段名称中的一个值出现在多行中的行的主要内容,如果未能解决你的问题,请参考以下文章