我有<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" />
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
<title></title>
<style>
.button {
display: none;
}
input:hover + .button, .button:hover {
display: inline-block;
}
</style>
</head>
<body>
<div class="small-4 columns">
<input type="text" value="Hi" />
<button class="button" onclick="alert('Hello');">Click Me</button>
</div>
</body>
</html>
表和users
表。
对于每个用户,每个规则有4行。
例如:user_id 1接受了所有规则,因此他将在规则表中具有类似的记录:
现在我要做的就是选择所有接受所有规定的用户。
不确定我应该如何构造此查询的regulations
部分。
这是我的看法,但我几乎可以肯定这是错误的,此外它说没有看到HAVING
列:
regulations.regulation
问题:选择所有接受了全部4条法规= 1的所有用户的正确方法是什么?
答案 0 :(得分:4)
您可以执行以下操作:
httr
它从用户表中选择所有user.id,其中不同的接受规则数为4。“ HAVING”子句中不同的计数是确保如果相同的规则出现两次,则只计数一次。 它不会检查的是接受的法规是1,2,3还是4。
另一个使用嵌套查询而不是内部联接的选项,效果相同:
SELECT users.id FROM users
INNER JOIN regulations ON regulations.user_id = users.id
WHERE regulations.accepted = 1
GROUP BY users.id
HAVING count(distinct regulations.regulation) = 4
最后一个(确实取决于每个规则的值)没有WHERE或HAVING子句,也没有COUNT:
SELECT * from users u
WHERE 4 = ( SELECT count(distinct regulation)
FROM regulations r
WHERE r.user_id=u.id and r.accepted=1 )
另请参阅测试:Fiddle
答案 1 :(得分:2)
尝试在以下查询中使用where子句,而不使用having子句:
SELECT users.* FROM users
JOIN regulations ON regulations.user_id = users.id
where regulations.accepted = 1 and regulations.regulation in (1,2 ,3 ,4)
GROUP BY regulations.user_id having count(distinct regulations.regulation)=4