2016-08-17 6 views
1

がHERESに仮定のシナリオでは、私の問題を説明するためのクエリ: MySQLの複数のサブでのクエリの使用結果は

(
    select user_id, stat 
    from stats1 
    where user_id in (select id from users where selected = 1) 
) 

union 

(
    select user_id, stat 
    from stats2 
    where user_id in (select id from users where selected = 1) 
) 
union 
(
    select user_id, stat 
    from stats3 
    where user_id in (select id from users where selected = 1) 
) 
# and so on ... 

が見るか「を」が使用されて複数回でのクエリ。私はこのクエリadnの結果を保存して、それを使用したいと思います。他のすべてのクエリで明らかに、PHPでそのクエリを実行してから値を渡すと、これは簡単に可能ですが、これは純粋にMySQLで可能ですか?あなたはあなたの選択したユーザー

CREATE VIEW selectedUsers AS SELECT id FROM users WHERE selected = 1; 

のための恒久的なビューを作成することができ

+0

あなたは[MySQLビュー](http://dev.mysql.com/doc/refman/5.7/en/view-syntax.html)を使うことができると思います。私は、エンジンが最初のリクエストの後にリクエスト中にキャッシュを使用すると仮定します。 –

+0

mysql変数にそのクエリの結果を格納し、後でそれを参照できます。 – 1000111

+0

これは通常、CTEにはmysqlにはないものがあり、mysqlはこれらのサブクエリでは非常に遅いものです。なぜあなたはそれが必要なのですか?いくつかのテーブルではなく、1つのテーブルであるべきですか? – e4c5

答えて

0

あなたがそれを必要なときに続いて、あなたの構文は、テーブル内のデータがユーザーであれば

( SELECT user_id, stat FROM stats1 WHERE user_id IN (SELECT * FROM selectedUsers) ) UNION ( SELECT user_id, stat from stats2 WHERE user_id IN (SELECT * FROM selectedUsers) ) UNION ( SELECT user_id, stat FROM stats3 WHERE user_id IN (SELECT * FROM selectedUsers) ) # and so on ... 

簡単かつ軽量になります
要求中に変更されない場合、データベースエンジンは、ビューが必要なたびにキャッシュを使用する必要があります。

ここにありますMySQL Views documentation

+0

これはuser_idではいけません(select * from selectedUsers)? – e4c5

+0

@ e4c5あなたは正しいです!ごめんなさい! –

+0

@ Ahmed-Anasありがとうございましたか? –

関連する問題