2013-03-17 46 views
1

我陷入了一个简单的查询,我无法弄清楚为什么不做我期望它做的事情。我有3个值数据库这样设置:
PHP条件下的MySQL查询

$measure = 'kg'; 
$country_code = 'DE'; 
$weight = '5'; 

WEIGHT_UNIT | COUNTRIES | MAX_WEIGHT | PRICE 
kg   | DE,AT  | 10   | 25.55 
lbs   | DE,AT,CH | 5   | 15.99 

我的PHP查询看起来是这样的:

SELECT * 
FROM `article_shipping_options` 
WHERE `weight_unit` = '$measure' 
    AND `countries` LIKE '%$country_code%' 
    AND `max_weight` <= '$weight' 
LIMIT 1; 

我期待的结果与25.55的价格行。

我知道我做错了这里鄙视我2天的谷歌搜索...任何帮助,将主要赞赏:)

+0

'var_dump(10 <= 5); //返回false“ – HamZa 2013-03-17 13:02:43

+0

然后查询的结果是什么? – Amir 2013-03-17 13:11:20

+0

如果您打算使用它查询,请勿将逗号分隔值存储在单个数据库列中。 – 2013-03-17 13:12:08

回答

1

你的意思是MAX_WEIGHT >= $weight

+0

是的,我已经尝试过......仍然没有成功...... – Jay 2013-03-17 13:12:33

+0

但如果运营商有这个问题,这将是一个解决方案。 – mavili 2013-03-17 13:19:48

+0

解决方案:那么你可能已经将max_weight字段定义为数字字段,在这种情况下,您应该删除$ weight变量的引号? - 由马维利在亚光岗位。 – Jay 2013-03-17 13:30:48

0

尝试使用FIND_IN_SET()和使用max_weight >= '$weight'

SELECT * 
FROM article_shipping_options 
WHERE weight_unit='$measure' AND 
     FIND_IN_SET($country_code, countries) > 0 AND 
     max_weight >= '$weight' 
LIMIT 1; 
+0

感谢您的快速回复,我很感激!不幸的是,FIND_INT_SET和我的查询做的事情是一样的。我认为问题在于运营商部分。 – Jay 2013-03-17 13:05:22

+0

是的,我做了...仍然没有正确的结果... – Jay 2013-03-17 13:11:29

1

我认为你有错不等于运算符。不应该是max_weight >= '$weight'

+0

感谢您的回复!是的,我也试过,没有成功。这个事情让我疯狂:D过去我使用过很多操作符,但这是我第一次陷入这种困境。 – Jay 2013-03-17 13:08:06

0

你必须$weight设置为5,但在该行的MAX_HEIGHT是10

则该行的最后一个条件的值为10 <= 5。由于条件未满足,该行未返回。

+0

是的,我已经太......没有成功,到目前为止:( – Jay 2013-03-17 13:09:31

+0

,那么你可能已经定义了'max_weight'领域为数字领域在这种情况下,你应该删除周围的引号尝试了' ?!$ weight'变量 – mavili 2013-03-17 13:14:33

+0

BINGO太感谢你了,我不能相信我做这种愚蠢的错误我已经付出了我周日的一半,但多亏了你,我现在可以休息一下 – Jay 2013-03-17 13:19:08