我希望所有产品都符合以下条件 1.产品名称喜欢"装饰" 2.列出所有类别名称的产品,例如" decor"
这是我的SQL查询
DB_NAME
我的查询工作正常,我已经退回了这样的输出
需要按产品名称订购
我该怎么做?
答案 0 :(得分:0)
试试这个ORDER BY
条款:
ORDER BY
CASE WHEN P.ProductName LIKE 'Decor%' THEN 0 ELSE 1 END,
P.ProductName;
这会将所有名称以Decor
开头的产品放在首位,然后是所有其他产品。在这两个组中,我们继续按整个产品名称的字母顺序排序。
我可以提供以下完整查询:
SELECT
t.ProductName, t.ProductPrice
FROM
(
SELECT DISTINCT
p.ProductName, p.ProductPrice
FROM Products_Joined AS P
LEFT JOIN Categories_Products_Link AS cp
ON p.ProductId = cp.ProductId
LEFT JOIN Categories c
ON cp.CategoryID = c.CategoryID
WHERE
p.ProductName LIKE '%param%' OR
c.CategoryName LIKE '%param%'
) t
ORDER BY
CASE WHEN t.ProductName LIKE 'Decor%' THEN 0 ELSE 1 END,
t.ProductName;
答案 1 :(得分:0)
请创建一个功能
DROP FUNCTION IF EXISTS PatIndex;
DELIMITER $$
CREATE FUNCTION PatIndex(pattern VARCHAR(255), tblString VARCHAR(255))
RETURNS INTEGER
DETERMINISTIC
BEGIN
DECLARE i INTEGER;
SET i = 1;
myloop: WHILE (i <= LENGTH(tblString)) DO
IF SUBSTRING(tblString, i, 1) REGEXP pattern THEN
RETURN(i);
LEAVE myloop;
END IF;
SET i = i + 1;
END WHILE;
RETURN(0);
END
然后将其用作排序逻辑
SELECT DISTINCT
P.ProductName,P.ProductPrice FROM
Products_Joined AS P LEFT JOIN Categories_Products_Link AS CP ON
P.ProductId = CP.ProductId LEFT JOIN Categories ON CP.CategoryID =
Categories.CategoryID where P.ProductName LIKE '%" & param &"%' OR
Categories.CategoryName LIKE '%" & param &"%'
order by SUBSTRING(P.ProductName ,PATINDEX('[A-z]',P.ProductName ),length(P.ProductName ) - PATINDEX('[A-z]',P.ProductName )+1)