2013-04-13 34 views
0

我有三个表 - 用户,城市和地区。有趣的选择mysql

users - u_id, u_city 
cities - c_id, r_c_id 
regions - r_id, r_alias 

userscities通过r_c_id = r_id占用由u_city = c_idcitiesregions。我有地区表的r_alias。是否有可能计算我选择的该地区的用户数(我有r_alias)(COUNT(u_id))。

感谢您的帮助!

+0

只是为了纠正你的术语 - 当你说“占用”你意味着“有一个外键关系”(u_city作为外键全市C_ID首要的关键) – Patashu

回答

1

试试这个:

select count(u_id) 
from users 
join cities on u_city = c_id 
join regions on r_c_id = r_id 
where r_alias = "r_alias_value' 
1

是的,这是可能的。

您需要先加入的表,

SELECT a.r_alias, COUNT(*) AS TotalUser 
FROM regions a 
     INNER JOIN cities b 
      ON a.r_id = b.r_c_id 
GROUP BY a.r_alias 

这将列出所有区域的用户的具体数量。如果要计算指定的区域,只需添加WHERE子句。

SELECT a.r_alias, COUNT(*) AS TotalUser 
FROM regions a 
     INNER JOIN cities b 
      ON a.r_id = b.r_c_id 
WHERE a.r_alias = 'valHERE' 
GROUP BY a.r_alias 
1

这将是相当更有效率接近

SELECT STRAIGHT_JOIN 
    r.*, 
    COUNT(u.u_id) AS `users` 

FROM (
    SELECT * FROM regions 
    WHERE r_alias LIKE '$region_alias' 
) AS r 

LEFT OUTER JOIN cities AS c ON (r.r_id = c.r_c_id) 

LEFT OUTER JOIN users AS u ON (u.u_city = c.c_id) 

GROUP BY r.r_id; 

执行select语句,因为它加入其余表之前筛选到一个特定的区域。

(代码是在MySQL 5.6.10测试)