簡體   English   中英

cakephp / php Mysql復雜查詢,用於儀表板統計

[英]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作為外鍵

任何想法,什么將是相同的查詢?

謝謝 !!

最后,由單一的查詢,這是我帶來的結果與幫助期望unionsubqueries ,如下:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM