0

こんにちは、基本的な MySQL クエリ形式は知っていますが、複雑なクエリを実行する必要があります。(説明目的で)言うと、列iditem_name、およびno_of_viewsを持つ3つのテーブルがあります。これらの 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";

これは完全に正常に機能しますが、私の問題は、テーブルに数百のアイテムがあり、多くのテーブルがあることです。これが私が行う方法である場合、クエリはすべてのテーブルからすべての結果を取得する必要があり、上位 10 のみを取得する必要がありますビュー、

ビューの数に基づいてすべてのテーブルから 10 個の値のみを選択するようにしたいのですが、たとえば、10 個のテーブルがあり、それぞれに no_of_views があるとします。すべてのテーブルの中でどのアイテムが最も高いビューを持ち、次に低い no_of_views を持っているかを照会するにはどうすればよいですか?別のテーブルまたは同じテーブルから真であるなど。それも可能です。

提案してください。

4

1 に答える 1

1

クエリを次のクエリと比較すると、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";
于 2012-07-21T07:00:13.400 に答える