2016-08-12 5 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, но когда его содержит 1000 + значений, оператор CASE становится очень большим, и запрос занимает много времени.

Есть ли лучший способ сделать это без физической вставки временных данных new_price при создании столбца new_price для сортировки?

Заранее спасибо.

+0

Это не присваивает столбцу 'new_price', он сравнивает его. – Barmar

+0

Извините, что пример SQL равен WHEN 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. – Vatev

Смежные вопросы