[英]Single MySQL query to get result from diffrent tables based on no of views
嗨,我知道基本的MySQL查詢格式,但現在我需要做一些復雜的查詢。 說(出於解釋目的)我有3個表,列id , item_name和no_of_views 。 我想通過單個查詢從這3個表中獲取前10個被查看的項目。
Table1
id: item_name no_of_views
1 item1 20
2 item2 25
3 item3 16
4 item4 10
Table2
id: item_name no_of_views
1 itemA 2
2 itemB 5
3 itemC 70
4 itemD 0
Table3
id: item_name no_of_views
1 item_1 34
2 item_2 55
3 item_3 10
4 item_4 1
我知道我必須加入這些表,然后根據no_of視圖進行查詢
喜歡
$query="
(SELECT * FROM Table2)
UNION ALL
(SELECT * FROM Table2)
UNION ALL
(SELECT * FROM Table2)
ORDER by no_of _views DESC LIMIT 10";
這工作得非常好,但我的問題是我的表中有100個項目,我有很多表,如果這是我這樣做的方式,查詢將必須從所有表中獲取所有結果,然后只給我前10名意見,
我想這樣做就像從所有表中選擇10個值,基於沒有視圖,比如說我有10個表,每個表都有no_of_views,我怎樣才能查詢哪個項目在所有表中都有最高視圖然后再下一個no_of_views從另一個表或同一個表,這是真的,等等。 甚至是可能的。
請建議。
將查詢與以下查詢進行比較時,MySQL執行計划是相同的。 優化器仍然只選擇每個表中的前10個(而不是完整的記錄集) ,然后將它們進行比較,因為它是所需的最大值。 這種方法並不像您認為的那樣低效。
$query="
(SELECT * FROM Table1 ORDER BY no_of_views DESC LIMIT 10)
UNION ALL
(SELECT * FROM Table2 ORDER BY no_of_views DESC LIMIT 10)
UNION ALL
(SELECT * FROM Table3 ORDER BY no_of_views DESC LIMIT 10)
ORDER by no_of _views DESC LIMIT 10";
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.