2016-08-12 64 views
0

我有一個已經很大的查詢來選擇產品信息。一切都很好,直到我嘗試創建一個計算列。MySql:創建一個高效的計算列

的想法是,在產品表中包含一個價格列,但價格變化的承諾之前,我創建了一個NEW_PRICE柱像這樣

CASE 
WHEN id = 1 THEN (value from $newPrice array) 
WHEN id = 2 THEN (value from $newPrice array) 
...(ect sql statement continues to be generated from array)... 
ELSE NULL END AS new_price 

用小newPrice陣列,但是當它工作時,一切都很好包含1,000 +值CASE語句變得非常大,查詢需要很長時間。

有沒有更好的方式做到這一點,而無需物理插入臨時new_price數據,同時仍然創建一個new_price列進行排序?

在此先感謝。

+0

這並沒有分配給'new_price'列,它比較它。 – Barmar

+0

對不起,壞的例子,SQL是什麼時候ID = 1然後9.99 ect。 – BasicallyBoredWithoutAnOffice

+0

您可以將新數據插入臨時表中並加入它 – Vatev

回答

0

您可以將所有$newPrice值加入逗號分隔的字符串,然後使用SUBSTRING_INDEX訪問其中的特定值。

$newPrices = implode(',', $newPrice); 

... 

SUBSTRING_INDEX(SUBSTRING_INDEX('$newPrices', ',', id), ',', -1) AS new_price 

另一種解決方案是將所有新價格插入臨時表中,然後加入它。

+0

如果'id'具有連續值,這是一個非常好的想法。對於32412,543872,833882這樣的ID,它不會很好。 – Vatev