我一直在网上搜索,找到了解决问题的“差不多”解决方案。 我正在使用查询:'MYSQL'
SELECT distinct company,price,material,`contractors_parameters`.`width`,`contractors_parameters`.`height`
from `contractors_parameters`
join `Windows_last_submissions` `wls`
where `wls`.`width` in (SELECT SPLIT_STR(`contractors_parameters`.`width` /*string*/
, ',' /*delimiter*/
, 1 /*start_position*/
))
and `wls`.`height` in (SELECT SPLIT_STR(`contractors_parameters`.`height` /*string*/
, ',' /*delimiter*/
, 1 /*start_position*/
))
and `contractors_parameters`.`material` = `wls`.`chosenmaterial`
and `contractors_parameters`.`type` = `wls`.`type`
and `contractors_parameters`.`price` <= `wls`.`maximumbid`
ORDER BY `contractors_parameters`.`company` ASC
在我的“width”和“height”列中。因此可能有多个整数:“22,23,24,25”。我使用了SPLIT_STR函数(我猜不是小提琴)将这些数字分开作为单独的字符串,并使用IN子句再次查询它们。
它几乎可以工作,除非'contractors_parameters'中的尺寸是宽度= 24,25高度= 48,49,50和'Windows_last_submission'中的尺寸(这是我要查询的表) - 它将起作用..但如果'contractors_paramaters'的尺寸是相反的,或者以不同的顺序,比如宽度= 25,24高度= 48,49,50 - 它将无法工作。
有人有什么建议吗?我尝试使用小提琴,但是当我使用SPLIT_STR()函数时它会出错。
答案 0 :(得分:1)
撇开你的数据不应该以那种方式存储的事实......你的检索方法应该没问题,而不必在查询中拆分字符串。
一旦你得到它就可以用它来分割它(并且它可以在小提琴中工作)
var str = "23,24,25";
var res = str.split(",");
如果您不喜欢JS而宁愿将其保留给PHP:
<?php
// Delimiters may be slash, dot, or hyphen
$date = "04/30/1973";
list($month, $day, $year) = split('[/.-]', $date);
echo "Month: $month; Day: $day; Year: $year<br />\n";
?>
这比在SQL级别尝试这样做容易得多。
答案 1 :(得分:1)
您的STR_SPLIT函数仅返回一个值,而不是您期望的值数组。如果您绝对必须使用此结构中的数据,那么您将其工作的唯一方式就是以下可疑查询
SELECT distinct company,price,material,`contractors_parameters`.`width`,`contractors_parameters`.`height`
from `contractors_parameters`
join `Windows_last_submissions` `wls`
where `wls`.`width` in (
SELECT SPLIT_STR(`contractors_parameters`.`width` /*string*/
, ',' /*delimiter*/
, 1 /*start_position*/)
union
SELECT SPLIT_STR(`contractors_parameters`.`width` /*string*/
, ',' /*delimiter*/
, 2 /*start_position*/)
union
SELECT SPLIT_STR(`contractors_parameters`.`width` /*string*/
, ',' /*delimiter*/
, 3 /*start_position*/)
union
SELECT SPLIT_STR(`contractors_parameters`.`width` /*string*/
, ',' /*delimiter*/
, 4 /*start_position*/)
)
and `wls`.`height` in (
SELECT SPLIT_STR(`contractors_parameters`.`height` /*string*/
, ',' /*delimiter*/
, 1 /*start_position*/)
union
SELECT SPLIT_STR(`contractors_parameters`.`height` /*string*/
, ',' /*delimiter*/
, 2 /*start_position*/)
union
SELECT SPLIT_STR(`contractors_parameters`.`height` /*string*/
, ',' /*delimiter*/
, 3 /*start_position*/)
union
SELECT SPLIT_STR(`contractors_parameters`.`height` /*string*/
, ',' /*delimiter*/
, 4 /*start_position*/)
)
and `contractors_parameters`.`material` = `wls`.`chosenmaterial`
and `contractors_parameters`.`type` = `wls`.`type`
and `contractors_parameters`.`price` <= `wls`.`maximumbid`
ORDER BY `contractors_parameters`.`company` ASC;
您需要在contractors_parameters.width或height列中包含您期望的最大逗号分隔值的联合行。