xcart_order_details에 저장된 활성 판매 주문의 재고 수량을 계산하려고합니다. 또한 처리 된 'P'또는 대기열에있는 'Q'상태의 x 일 내에있는 주문과 스톡 유형이 특정 위치와 일치하는 경우에만 재고를 계산하려고합니다. C1 재고, C2 재고 등.조인 및 중첩 된 쿼리를 사용하여 수량 계산
예전의 xcart 데이터베이스에서는 비교적 간단했습니다.
SELECT COUNT(`amount`)
FROM `xcart_order_details`
WHERE `productid` IN (
SELECT `productid`
FROM `xcart_products` WHERE `orderid` IN
(SELECT `orderid`
FROM `xcart_orders`
WHERE `date` > ".$date_range."
AND (`status` = 'P'
OR `status` = 'Q'))
AND (LOWER(param01) = 'c1 stock'
OR LOWER(param01) = 'c2 stock'
OR LOWER(param01) = 'g stock'
OR LOWER(param01) = 'stock')
AND `productid` = ".$safe_prodid.")
이 쿼리가 작동했습니다. 그러나 이제 우리의 재고 위치는 xcart_extra_field_values라고하는 다른 테이블에 저장되므로 fieldid = 5 인 경우 검색해야합니다.
fieldid = 5 인 xcart_extra_field_values에서 값 필드를 가져 오기 위해 조인을 사용하고 위 쿼리에서 수행중인 작업을 시도했지만 작동하지 않습니다.
SELECT COUNT(`a.amount`)
FROM xcart_order_details a,
xcart_extra_field_values b
WHERE a.productid IN (
SELECT productid
FROM xcart_products WHERE orderid IN
(SELECT orderid
FROM xcart_orders
WHERE date > 1409529600
AND (status = 'P'
OR status = 'Q'))
AND (LOWER(b.value) = 'c1 stock'
OR LOWER(b.value) = 'c2 stock'
OR LOWER(b.value) = 'g stock'
OR LOWER(b.value) = 'stock')
AND (a.productid = b.productid)
AND (a.productid = 4169)
AND (b.fieldid = 5)
불행하게도이 쿼리가 작동하지 않습니다, 나는 그것을 구문 문제를 알고 있지만, 내가지고있어 오류가 전혀 도움이되지 않습니다.
내가 뭘 잘못하고 있는지 알 수있는 사람이 있습니까?
어떤 오류가 발생합니까? – Arion
내가 얻고 : "SQL 구문에 오류가있어,"at line 19 "근처에서 사용할 올바른 구문에 대해서는 MySQL 서버 버전에 해당하는 설명서를 확인하십시오. 어떤 것이 의미가 있는지 , 그 당시에는 불분명했다. –
금액이있는 레코드를 계산하는 것은 이상한 일입니다. WHERE 절에서 NULL을 제외하고 (AND AND IS NOT NULL)) count 레코드 ('COUNT (*) ')를 사용하면 테이블에서 다른 값을 선택하지 않아도됩니다. ') 대신. 금액이 null이 아닌 누적 값보다 count 레코드 (다시 'COUNT (*)')보다 NULL이 아닌 경우. (물론 합계를 계산하려면 합계를 계산할 수 있습니다.) –