1
私はMySQLストアドプロシージャの初心者です。複数の列フィルタを持つ製品のリストを検索するには、MySQLストアドプロシージャを作成する必要があります。値付きのすべてのパラメータを送信しないと、下に掲載されたコードは値を返しません。他のパラメータを送信するときに、すべてのパラメータが空であり、結果がフィルタリングされる場合は、すべての製品を表示する必要があります。MySQLストアドプロシージャを使用した複数列の検索
DELIMITER $$
USE `537174_alsuper`$$
DROP PROCEDURE IF EXISTS `ListarProductos`$$
CREATE DEFINER=`537174_alsuper`@`%` PROCEDURE `ListarProductos`(
IN Token VARCHAR(50),
IN cID INT(11),
IN pID INT(11),
IN os INT(1),
IN productName VARCHAR(255)
)
BEGIN
DECLARE BaseToken VARCHAR(50);
SELECT TOKEN_VALUE INTO BaseToken FROM web_service_tokens WHERE 1 ORDER BY TOKEN_ID DESC LIMIT 1;
IF (Token = BaseToken) THEN
SELECT DISTINCT d.thumbnail, a.productID, a.name_en, a.categoryID, a.Price, a.description_en
FROM SC_products a, SC_product_pictures d
WHERE a.ordering_available='1' AND d.productID=a.productID AND
CASE
WHEN cID IS NOT NULL
THEN a.categoryID = cID
WHEN cID IS NULL
THEN 1 = 1
END
AND
CASE
WHEN pID IS NOT NULL
THEN a.productID = pID
WHEN pID IS NULL
THEN 1 = 1
END
AND
CASE
WHEN os IS NOT NULL
THEN a.on_special = os
WHEN os IS NULL
THEN 1 = 1
END
AND
CASE
WHEN productName IS NOT NULL
THEN a.name_en LIKE CONCAT('%',productName,'%')
WHEN productName IS NULL
THEN 1 = 1
END
ORDER BY a.name_en ASC;
END IF;
END$$
DELIMITER ;
複数の列フィルタを使用してストアドプロシージャを検索する場合、誰でも正しい方法を指し示すことができますか?
それはまだすべてのフィールドの組み合わせでは動作しませんでしたが、私はWhere句で地雷の上にあなたの方法を使用して好む、あなたは、より効率的かつクリーンに見えます。私は問題がCategoryIDとProductIDによって製品を取得するために別のストアドプロシージャを作成したので、CategoryIDとProductIDを残りのwhereフィールドと組み合わせて送信するときに発生することに注意しました。ご協力いただきありがとうございます。 – Nelson