Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否可以在MySQL SELECT中循环使用逗号分隔的列表?_Mysql_Regex_Select_Stored Procedures_Loops - Fatal编程技术网

是否可以在MySQL SELECT中循环使用逗号分隔的列表?

是否可以在MySQL SELECT中循环使用逗号分隔的列表?,mysql,regex,select,stored-procedures,loops,Mysql,Regex,Select,Stored Procedures,Loops,我需要从MySQL表中选择所有满足用户提交的大小/数量对的产品 例如,我最终得到了 S = 2 M = 2 L = 3 XL = 1 我得到两个分隔符字符串,如下所示: S,M,L,XL 2,2,3,1 我的数据库查询当前位于Coldfusion8页面中,在该页面中,我只循环通过两个字符串创建的2d数组,并在SELECT语句中执行循环 <cfloop from="1" to="#array.length#" index="i"> OR ( size = <cf

我需要从MySQL表中选择所有满足用户提交的大小/数量对的产品

例如,我最终得到了

S  = 2
M  = 2
L  = 3
XL = 1
我得到两个分隔符字符串,如下所示:

S,M,L,XL 
2,2,3,1
我的数据库查询当前位于Coldfusion8页面中,在该页面中,我只循环通过两个字符串创建的2d数组,并在SELECT语句中执行循环

 <cfloop from="1" to="#array.length#" index="i">
 OR  ( size = <cfqueryparam cfsqltype="cfsql_varchar" value="#var.lotArray[i][1]#"> AND qty  >= <cfqueryparam cfsqltype="cfsql_varchar" value="#var.lotArray[i][2]#"> )
 </cfloop>

或(尺寸=和数量>=)
问题:
在存储过程中的SELECT内的MySQL中是否有这样做的方法?我想我可以循环字符串长度,并在每次迭代中选择一次,但这将是大量的结果集,我不确定如何将它们组合在一起。我还研究了正则表达式,但我不确定如何选择两个正则表达式字符串,以及两个需要关联的字符串(m=2,L=3…)


谢谢你的提示

我不是很喜欢MySQL。。。好像不行。我希望至少能够使用ELT循环使用我的变量名,如下所示:

 ELT( loopcounter, passed_sizes )
循环计数器从1,2,3开始。。。传递的大小是一个字符串,比如'S','M','L','XL',但我想你也不能构造这样的元素

因此,我最终采用了过量代码解决方案:

BEGIN
    SELECT art.a, art.v, art.c
    FROM arts AS art
    WHERE ( (filter = '') AND (1=1)
        OR art.d = filter
        )          
    AND ( (size_1 = '') AND (1=1) OR ( art.size = size_1 AND art.qty >= qty_1 ) )
    AND ( (size_2 = '') AND (1=1) OR ( art.size = size_2 AND art.qty >= qty_2 ) )
    AND ( (size_3 = '') AND (1=1) OR ( art.size = size_3 AND art.qty >= qty_3 ) )
    AND ( (size_4 = '') AND (1=1) OR ( art.size = size_4 AND art.qty >= qty_4 ) )
    AND ( (size_5 = '') AND (1=1) OR ( art.size = size_5 AND art.qty >= qty_5 ) )
    AND ( (size_6 = '') AND (1=1) OR ( art.size = size_6 AND art.qty >= qty_6 ) )
    AND ( (size_7 = '') AND (1=1) OR ( art.size = size_7 AND art.qty >= qty_7 ) )
    AND ( (size_8 = '') AND (1=1) OR ( art.size = size_8 AND art.qty >= qty_8 ) )
    AND ( (size_9 = '') AND (1=1) OR ( art.size = size_9 AND art.qty >= qty_9 ) )
    AND ( (size_10 = '') AND (1=1) OR ( art.size = size_10 AND art.qty >= qty_10 ) )
    GROUP BY art.a, art.v, art.c
    HAVING anzahl = length;
 END

并传入22个参数,而不是两个字符串。可读但男孩我错过了易于使用的循环。。。如果有人知道一个更简单的实现,请作为答案发布。谢谢

通过大量使用函数可能实现这一点,但您的性能将非常差。请遵守第一个NF(原子值)。-这必须归功于数据库规范化,数据库规范化是“组织关系数据库的字段和表以最小化冗余和依赖性的过程”。遵循规范化准则通常会带来更高的性能。您应该更改模式,或者继续像现在这样在应用程序代码中这样做。尝试使用mysql来实现这一点会使查询变得非常臃肿、难以阅读且效率低下。