我正在尝试获得一些查询结果。表格信息关于用户访问的网站中的哪个页面。所以我可以连续访问页面" A"每个示例和第二行,访问该页面的同一用户" B"。我想做一个查询,选择访问该页面的用户或用户" A"和" B"。我不能在我的条件下制作“和”,因为只有一列。
有表格结构
ID | user_id | page | views
1 1 A 44
2 1 B 120
3 2 A 140
4 3 A 22
我试过这个但是没有工作
SELECT users.name,users.id,users.email
FROM users
JOIN help_messages ON users.id = help_messages.id_user
WHERE (PAGE LIKE '%clubs%' or PAGE like '%profile%') and views >= 1
GROUP BY help_messages.id_user, help_messages.page
请任何解决方案。感谢
答案 0 :(得分:0)
这种方法的一般方法使用聚合和having
子句:
select user_id
from table t
group by user_id
having sum(page = 'A') > 0 and sum(page = 'B') > 0;
having
子句中的第一个条件计算具有'A'
且仅允许具有至少一个此类行的user_id
的行数。第二个条件对'B'
执行相同的操作。
这是一种通用方法,因为很容易添加其他页面。此外,如果您想要访问'A'而不是'B'的人,您只需使用:
having sum(page = 'A') > 0 and sum(page = 'B') = 0;
答案 1 :(得分:0)
看看这是否适合你:
SELECT sub1.* FROM
(SELECT * FROM users WHERE page = 'A') AS sub1
JOIN
((SELECT * FROM users WHERE page = 'B') AS sub2
ON (sub1.user_id = sub2.user_id)