我有一个已经很大的查询来选择产品信息。一切都很好,直到我尝试创建一个计算列。
这个想法是产品表包含价格列,但在提交价格变更之前我创建了一个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 :(得分:0)
您可以将所有$newPrice
值加入逗号分隔的字符串,然后使用SUBSTRING_INDEX
访问其中的特定值。
$newPrices = implode(',', $newPrice);
...
SUBSTRING_INDEX(SUBSTRING_INDEX('$newPrices', ',', id), ',', -1) AS new_price
另一种解决方案是将所有新价格插入临时表中,然后加入它。
答案 1 :(得分:0)