簡體   English   中英

單個MySQL查詢,從不基於視圖的不同表中獲取結果

[英]Single MySQL query to get result from diffrent tables based on no of views

嗨,我知道基本的MySQL查詢格式,但現在我需要做一些復雜的查詢。 說(出於解釋目的)我有3個表,列iditem_nameno_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.

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