2017-06-19 5 views
0

、私は、次のようなクエリている:これは、基準に応じて任意の場所に1からID年代の多くの1000のに私を複数のクエリでクエリの結果をGoogleに保存するにはどうすればよいですか? PHPとsqlite3のを使用して

$firstquery = "SELECT id FROM mytable WHERE critera=........"; 

を与えることができます。

これで、私のページ上で最大40個の他のSQLクエリにこの見つかったセットを使用します。すべてのようなバリエーションです:私はたくさん持っていると第二これら$、$第三... $ thirtiethqueryページ遅くなっ着工失ったとき、今

$secondquery = "SELECT name FROM nametable WHERE nametable.id IN (".$firstquery.")"; 
$thirdquery = "SELECT car FROM cartable WHERE cartable.id IN (".$firstquery.")"; 

と私は常にオーバー$ firstquery実行するために必要だと思いますし、以上は助けにはならない。

$ firstqueryを何度も何度も実行する必要性を避ける方法はありますか?たぶん結果を何らかの方法で保存していますか? (文字列として結果を格納しようとしましたが、WHEREにありましたが、のidがの場合、その句のパラメータが多すぎます)。

ありがとうございました! MacKniven

+0

私は最初に質問しなければなりません:他のテーブルに関連ID(外部キー)はありませんか?とにかく、 'firstquery'からカンマで区切られたidの文字列を作成し、この文字列を他のクエリと一緒にIN句で使用することができます。それは 'firstquery'クエリを繰り返さないようにする一つの方法です。しかし、私は他の最適化の改善のためにもっと多くの情報を持っていなければならないが、他の取り扱いの「調整」を行うことができると確信している。 –

+0

なぜ 'JOIN'を使用せず、* $ firstquery *を追加せずに各クエリを一度実行するのはなぜですか? – Parfait

答えて

0

最初のクエリが遅すぎてページの読み込み時間に著しい影響がある場合は、最適化する必要があります。

まだ遅すぎる場合は、一時的に結果をどこかに保存する必要があります。

CREATE TEMPORARY TABLE FirstQueryResults AS 
SELECT id FROM mytable WHERE critera=........; 

SELECT name FROM nametable WHERE nametable.id IN FirstQueryResults; 
... 

DROP TABLE FirstQueryResults; 

そして、多くの結果が存在することができるならば、それは価値があるかもしれません:あまりにも多くの結果があることができれば、あなたは、単に一時的なテーブルを使用することができます

(一時テーブルは、他の接続では表示されません)テンポラリテーブルのcreate an indexに転送します。

関連する問題