[英]cakephp / php Mysql complex query for dashboard statistics
我有以下mysql數據庫表:
cities
states
countries
與
members
samajs
(國際上的一群人)
並且我想為我的dashboard
頁面創建一個查詢,該查詢將具有以下結果:
Country Members Samajs Total (table header)
Country1 7 5 16 (country row with total members, samajs and total count)
state1 5 2 7 (state row with total members, samajs and total count)
city1 3 1 4 (all cities in that state, city row with total members, samajs and total count)
city2 2 0 2
state2 2 1 3
Country2 3 2 5 (country row with total members, samajs and total count)
...and vice versa....
在這里, members
表將使用country_id, state_id and city_id
作為外鍵
samajs
表還將具有country_id, state_id and city_id
作為外鍵
任何想法,什么將是相同的查詢?
謝謝 !!
最后,由單一的查詢,這是我帶來的結果與幫助期望union
和subqueries
,如下:
SELECT country_id, state_id, city_id, country, membercount, samajcount FROM
(
SELECT con.country_id, -1 as state_id, -2 as city_id, con.country,
(SELECT COUNT(member_id) FROM members WHERE country_id = con.country_id) as membercount,
(SELECT COUNT(samaj_id) FROM samajs WHERE country_id = con.country_id) as samajcount
FROM countries as con
group by con.country
UNION
SELECT s.country_id, s.state_id, -2 as city_id, s.state as country,
(SELECT COUNT(member_id) FROM members WHERE state_id = s.state_id) as membercount,
(SELECT COUNT(samaj_id) FROM samajs WHERE state_id = s.state_id) as samajcount
FROM states as s
group by s.state
UNION
SELECT c.country_id, c.state_id, c.city_id, c.city as country,
(SELECT COUNT(member_id) FROM members WHERE city_id = c.city_id) as membercount,
(SELECT COUNT(samaj_id) FROM samajs WHERE city_id = c.city_id) as samajcount
FROM cities as c
group by c.city
) COUNTRY
order by country_id, state_id, city_id, country ;
希望它可以幫助某人滿足他們的要求!
謝謝
我准備根據您的表字段進行查詢更改:
// for country based
SELECT
countries.name AS countryName,
(SELECT
count('x') FROM members WHERE members.country_id = countries.id) as totalMembers,
COUNT(samajs.country_id) as totalSamajs
FROM
`countries`
INNER JOIN samajs ON samajs.country_id = countries.id
GROUP BY
countries.name
ORDER BY
totalMembers DESC
// state based result
SELECT
states.name AS stateName,
(SELECT
count('x') FROM members WHERE members.state_id = states.id) as totalMembers,
COUNT(samajs.state_id) as totalSamajs
FROM
`states`
INNER JOIN samajs ON samajs.state_id = states.id
GROUP BY
states.name
ORDER BY
totalMembers DESC
//city based result
SELECT
cities.name AS cityName,
(SELECT
count('x') FROM members WHERE members.city_id = cities.id) as totalMembers,
COUNT(samajs.city_id) as totalSamajs
FROM
`cities`
INNER JOIN samajs ON samajs.city_id = cities.id
GROUP BY
cities.name
ORDER BY
totalMembers DESC
根據cakephp方法,您可以遵循以下問題:
基於相關表數據計數的訂單數據
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.