gpt4 book ai didi

mysql 其中列名在(函数(一个值))不工作

转载 作者:行者123 更新时间:2023-11-30 21:54:34 24 4
gpt4 key购买 nike

我在 mysql 查询中遇到了一个奇怪的情况: 当使用 WHERE unterkategorie IN (children_csv(1)) 时,没有结果。 第二个 "WHERE unterkategorie IN (11,12,13,28,29,32,14,15,16,30,31,33,34,35)" 在我替换函数名称时获取记录单独执行时函数的结果

完整的查询是:

    SELECT k.name category_name,
p.unterkategorie,
p.artikelnummer,
p.hauptkategorie,
p.id,
p.name product_name,
p.preis,
p.sortierung,
p.verpackungseinheit
FROM produkte p, kategorie k
WHERE unterkategorie IN (children_csv(1))
WHERE unterkategorie IN (11,12,13,28,29,32,14,15,16,30,31,33,34,35)
AND p.unterkategorie = k.id
ORDER BY unterkategorie, p.sortierung

函数定义如下

delimiter //
CREATE DEFINER=`root`@`localhost` FUNCTION `children_csv`(child int)RETURNS varchar(1000) CHARSET utf8
BEGIN
declare return_value varchar(1000);
SELECT GROUP_CONCAT(Level SEPARATOR ',')childrens into return_value FROM (
SELECT @Ids := (
SELECT GROUP_CONCAT(`id` SEPARATOR ',')
FROM `kategorie`
WHERE FIND_IN_SET(`parent`, @Ids)
ORDER BY parent, sortierung

) Level
FROM `kategorie`
JOIN (SELECT @Ids := child) temp1
WHERE FIND_IN_SET(`parent`, @Ids)

) temp2;

RETURN return_value;
END;
//
delimiter ;

最佳答案

您的函数返回一个值,一个字符串。它不返回值列表(因为 MySQL 函数不这样做)。如果想直接使用函数,可以使用find_in_set():

WHERE find_in_set(unterkategorie, children_csv(1))

我要提醒你,MySQL 不能在 unterkategorie 上使用索引,所以这可能会更慢。

如果您想要更快的查询,那么您可以将查询构造为字符串(称为动态 SQL)并使用 prepareexec 来运行它。

如果您来自另一种编程语言,则需要了解函数并不是提高 SQL 性能的途径。将逻辑移至函数中通常无助于提高性能。

关于mysql 其中列名在(函数(一个值))不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45782836/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com