我試圖計算存儲在xcart_order_details中的活動銷售訂單中的庫存數量。我也只希望從x天內訂單中處理'P'或排隊'Q'狀態的股票以及股票類型與某些地點匹配的股票數量; 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的位置檢索;
我試過使用連接從xcart_extra_field_values中獲取值字段,其中fieldid = 5,並嘗試執行我正在處理的上述查詢,但它不起作用。
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 2014-09-24 11:51:02
我得到了: 「#1064 - 你的SQL語法有錯誤;查看與你的MySQL服務器版本相對應的手冊,在第19行使用正確的語法」 「事後看來是有道理的,但當時還不清楚。 – 2014-09-24 12:05:56
奇怪的是,順便說一下,你可以計算有數量的記錄。如果這是有意的,並且您不從表中選擇任何其他值,那麼如果您排除WHERE子句中的NULL('AND AND NOT IS NOT NULL)')並計數記錄('COUNT(*)) ')。如果金額永遠不會比計數記錄NULL(再次爲COUNT(*)'),而不是無論如何不能爲空的金額的非空發生。 (當然,如果你想計算總金額,你會* SUM *金額得到這個總數。) – 2014-09-24 12:30:06