2017-06-19 65 views
0

使用PHP和SQLITE3,我有一個查詢,如:如何在多個查詢中存儲查詢結果給我們?

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

這可以給我從1到任何地方1000多家的ID的取決於標準。

然後,我在我的頁面上使用這個找到的集合,最多可以查詢40個其他SQL查詢。所有的變化,例如:

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

現在,當我有很多,失去了這些$第二,第三$ ... $ thirtiethquery的頁面開始越來越慢,我覺得需要不斷向$ firstquery跑過去,結束沒有幫助。

有沒有辦法避免需要反覆運行$ firstquery?也許以某種方式存儲結果? (我試圖將結果存儲爲一個字符串,並將其存儲在WHERE中,但如果有成千上萬個參數,則該子句具有太多參數)。

感謝您的任何想法! 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