/ / अगर मैं बयान में phs, mysql, उपनाम का उपयोग कैसे कर सकता हूँ?

अगर मैं कथन - php, mysql, उपनाम में mysql उपनाम कॉलम का उपयोग कैसे कर सकता हूं

"फ़ील्ड सूची" में अज्ञात कॉलम "CURRENT_STOCK_LEVEL"

$queryString = "SELECT A.ITEM_CODE, A.BEGINNING_BALANCE AS BEGINNING_BALANCE, B.DELIVERY AS DELIVERY, C.ISSUANCE AS ISSUANCE,
(IFNULL(BEGINNING_BALANCE, 0) + IFNULL(DELIVERY, 0)) - IFNULL(ISSUANCE, 0) AS CURRENT_STOCK_LEVEL , A.REORDERPNT AS REORDERPNT,

IF( CURRENT_STOCK_LEVEL <= REORDERPNT, "LOW", "HIGH") AS STATUS

FROM MM_NEW_ROP_ITEMS AS A
LEFT OUTER JOIN (SELECT ITEM_CODE, SUM(QUANTITY) AS ISSUANCE FROM MM_NEW_ROP_ISSUANCES GROUP BY ITEM_CODE) AS C ON A.ITEM_CODE = C.ITEM_CODE
LEFT OUTER JOIN (SELECT ITEM_CODE, SUM(QUANTITY) AS DELIVERY FROM MM_NEW_ROP_DELIVERIES GROUP BY ITEM_CODE) AS B ON A.ITEM_CODE = B.ITEM_CODE
ORDER BY A.ITEM_CODE";

$query = mysql_query($queryString) or die(mysql_error());

//makes a loop and creates an array with query fields

$items = array();
while($item = mysql_fetch_assoc($query)) {
$items[] = $item;
}

//encodes for JSON format
echo json_encode(array(
"success" => mysql_errno() == 0,
"items" => $items
));

उत्तर:

जवाब के लिए 0 № 1

यह आपका है SELECT:

SELECT A.ITEM_CODE, A.BEGINNING_BALANCE, B.DELIVERY AS DELIVERY, C.ISSUANCE,
(IFNULL(BEGINNING_BALANCE, 0) + IFNULL(DELIVERY, 0)) - IFNULL(ISSUANCE, 0) AS CURRENT_STOCK_LEVEL ,
A.REORDERPNT AS REORDERPNT,
IF(CURRENT_STOCK_LEVEL <= REORDERPNT, "LOW", "HIGH") AS STATUS

जैसा कि त्रुटि से पता चलता है, आप समान रूप से एक स्तंभ उपनाम का उपयोग नहीं कर सकते SELECT कथन जहां इसे परिभाषित किया गया है। यह न केवल पर लागू होता है SELECT, लेकिन क्वेरी के अन्य घटकों जैसे कि भी WHERE.

इसलिए, तर्क को दोहराएं, और मुझे पसंद है COALESCE() तथा CASE (यह एएनएसआई मानक कार्य है):

SELECT A.ITEM_CODE, A.BEGINNING_BALANCE, B.DELIVERY AS DELIVERY, C.ISSUANCE,
(COALESCE(BEGINNING_BALANCE, 0) + COALESCE(DELIVERY, 0)) - COALESCE(ISSUANCE, 0)) AS CURRENT_STOCK_LEVEL ,
A.REORDERPNT AS REORDERPNT,
(CASE WHEN COALESCE(BEGINNING_BALANCE, 0) + COALESCE(DELIVERY, 0)) -
COALESCE(ISSUANCE, 0) <= REORDERPNT
THEN "LOW" ELSE "HIGH"
END) AS STATUS

जवाब के लिए 0 № 2

आप MySQL सत्र चर का उपयोग कर सकते हैं जो तर्क को दोहराए बिना अपना काम करते हैं।

यहाँ प्रश्न में ऐसा करने का तरीका है:

SELECT A.ITEM_CODE, A.BEGINNING_BALANCE AS BEGINNING_BALANCE, B.DELIVERY AS DELIVERY, C.ISSUANCE AS ISSUANCE,
@temp_stock_level:=0, @temp_stock_level:=(IFNULL(BEGINNING_BALANCE, 0) + IFNULL(DELIVERY, 0)) - IFNULL(ISSUANCE, 0) AS CURRENT_STOCK_LEVEL ,
A.REORDERPNT AS REORDERPNT,IF( @temp_stock_level <= REORDERPNT, "LOW", "HIGH") AS STATUS
FROM MM_NEW_ROP_ITEMS AS A
LEFT OUTER JOIN (SELECT ITEM_CODE, SUM(QUANTITY) AS ISSUANCE FROM MM_NEW_ROP_ISSUANCES GROUP BY ITEM_CODE) AS C ON A.ITEM_CODE = C.ITEM_CODE
LEFT OUTER JOIN (SELECT ITEM_CODE, SUM(QUANTITY) AS DELIVERY FROM MM_NEW_ROP_DELIVERIES GROUP BY ITEM_CODE) AS B ON A.ITEM_CODE = B.ITEM_CODE
ORDER BY A.ITEM_CODE;

इस क्वेरी में मैंने मूल्य को संग्रहीत करने के लिए @temp_stock_level चर का उपयोग किया है CURRENT_STOCK_LEVEL