2016-08-12 3 views
0

제품 정보를 선택하는 이미 큰 쿼리가 있습니다. 계산 된 열을 만들 때까지는 문제가 없습니다.MySql : 효율적인 계산 열 만들기

아이디어는 제품 테이블 가격 열을 포함하지만, 가격 변화가 최선을 다하고 있습니다 전에 때를 작은 newPrice 어레이하지만 작업 할 때 너무

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 

모든 것이 괜찮처럼 나는 NEW_PRICE 열을 생성 CASE 문이 매우 커지고 쿼리에 시간이 오래 걸리면 1,000 + 값이 포함됩니다.

정렬을 위해 new_price 열을 생성하면서 임시 new_price 데이터를 물리적으로 삽입하지 않고이 작업을 수행하는 더 좋은 방법이 있습니까?

미리 감사드립니다.

+0

'new_price' 열에 지정하지 않으면이 값을 비교합니다. – Barmar

+0

죄송합니다 나쁜 예를 들어, SQL 때 ID = 1 9.99 요법. – 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