![](/img/trans.png)
[英]Selecting data from two different tables of the same database in PHP/ MYSQL
[英]Selecting data from two MySQL tables at once in php
我試圖達到的目標;
計算兩個表中的行數(將它們加在一起),並按表中“ Country
列中的Country
地區代碼對行進行分組。 然后,我將按行數和國家/地區輸出結果,例如
到目前為止,我有MySQL代碼;
SELECT COUNT(id) as TotalClicks, Country FROM adverts_analytics_user_clicks WHERE AdvertID =:AdvertID GROUP BY Country
這很好,但是我需要它同時從另一個表中選擇相同的數據,並根據“ Country
字段組合COUNT()
值。
任何幫助,將不勝感激!
對第二個表重復您的第一個查詢,以使輸出列具有相同的名稱和數據類型。
然后將這些結果結合在一起。
最后,按國家匯總總點擊次數。
SELECT Country, sum(TotalClicks) as TotalClicks
FROM
(
SELECT COUNT(id) as TotalClicks, Country FROM adverts_analytics_user_clicks WHERE AdvertID =:AdvertID GROUP BY Country
UNION ALL
SELECT COUNT(id) as TotalClicks, Country FROM table 2 WHERE AdvertID =:AdvertID GROUP BY Country
)
GROUP BY Country
一種方法是使用UNION ALL運算符將另一個查詢追加到查詢中。 (該查詢可以引用不同的表名;重要的部分是它返回具有相同數據類型的相同數量的列。)然后將其包裝在一組括號中,並為其分配一個別名,然后使用它代替外查詢中的表名:
例如:
SELECT SUM(t.TotalClicks) AS TotalClicks, t.Country
FROM (
/* original query*/
SELECT COUNT(id) as TotalClicks, Country
FROM adverts_analytics_user_clicks
WHERE AdvertID =:AdvertID
GROUP BY Country
/* append results from query that returns same columns */
UNION ALL
SELECT COUNT(id) as TotalClicks, Country
FROM some_other_table
WHERE AdvertID =:AdvertID2
GROUP BY Country
) t
GROUP BY t.Country
注意:在同一條語句中兩次使用相同的綁定變量名稱時,我們遇到了問題。 我們使用單獨的綁定變量名稱,並將相同的值綁定兩次。
由於MySQL處理內聯視圖(將其具體化為臨時表)的方式,從每個表中獲取聚合,然后將聚合連接在一起,比將非聚合表連接起來幾乎總是更有效。
跟進
simon funiic說... 語句正在工作,但是它沒有為TotalClicks返回正確的數字(Country GB有兩行-每個表中有一行),但僅返回1。
響應
給定外部查詢中的GROUP BY(在上面的答案中),我們期望僅返回一行,表示Country值為'GB'
。 如果僅在內聯視圖中運行查詢(在上面的查詢中以t
),則將獲得兩行。
最外面的查詢是合並這兩行(使用GROUP BY t.Country),並將TotalClicks的值加在一起( SUM(t.TotalClicks)
)
如果要分別返回行,則根本不需要該外部查詢。
如果要在每行上包含一個“標記”以標識該行來自哪個查詢,可以在每個查詢的SELECT列表中添加一個文字:
SELECT COUNT(id) AS TotalClicks
, Country
, 'aauc' AS `source`
FROM adverts_analytics_user_clicks
WHERE AdvertID =:AdvertID
GROUP BY Country
UNION ALL
SELECT COUNT(id) AS TotalClicks
, Country
, 'sot' AS `source`
FROM some_other_table
WHERE AdvertID =:AdvertID2
GROUP BY Country
ORDER BY 2,3
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.