2013-03-17 2 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

+0

, то что является результатом запроса? – Amir

+0

Не храните значения, разделенные запятыми, в одном столбце базы данных, если вы собираетесь использовать его для запроса. –

ответ

1

Возможно, вы имели в виду MAX_WEIGHT >= $weight?

+0

да, я тоже пробовал ... все еще не успел ... – Jay

+0

, но если бы оператор был проблемой, это было бы решением. – mavili

+0

РЕШЕНИЕ: тогда вы могли бы определить поле max_weight как числовое поле, в этом случае вы должны удалить кавычки вокруг переменной $ weight? - малили под матовой стойкой. – Jay

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

Спасибо за быстрый ответ, я ценю это! Unfortunatelly FIND_INT_SET делает то же, что и мой запрос. Я думаю, что проблема лежит на стороне оператора. – Jay

+0

да, я сделал ... все еще не имею нужного результата ... – Jay

1

Я думаю, что у вас неправильный оператор неравенства. Не должно быть max_weight >= '$weight'?

+0

Спасибо за ваш ответ! Да, я пробовал это тоже без успеха. Эта вещь просто сводит меня с ума: D Я использовал операторов много в прошлом, но это первый раз, когда я застрял так. – Jay

0

Вы $weight набор до 5, но в Роу MAX_HEIGHT 10.

Тогда последнее условие для этой строки вычисляется как 10 <= 5. Поскольку условие не было выполнено, строка не была возвращена.

+0

Да, я тоже так стараюсь ... пока не удалось :( – Jay

+0

, тогда вы могли бы определить поле 'max_weight' как числовое поле, в этом случае вы должны удалить кавычки вокруг' $ weight' variable? – mavili

+0

BINGO! Большое вам спасибо! Я не могу поверить, что сделал такую ​​глупую ошибку. Я заплатил половину своего воскресенья за это, но благодаря вам я могу немного отдохнуть! – Jay

Смежные вопросы