簡體   English   中英

在PHP中一次從兩個MySQL表中選擇數據

[英]Selecting data from two MySQL tables at once in php

我試圖達到的目標;

計算兩個表中的行數(將它們加在一起),並按表中“ Country列中的Country地區代碼對行進行分組。 然后,我將按行數和國家/地區輸出結果,例如

  • GB => 200次觀看
  • 美國=> 500次觀看
  • CH => 119瀏覽

到目前為止,我有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.

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