2016-01-31 4 views
0

Прежде всего, я знаю, что вопрос может быть задан раньше, но мой запрос немного отличается. Я искал, но я не мог найти то, что искал. Любой, кто знает, что этот вопрос задан раньше, укажите ссылку на этот пост.Запрос Mysql с несколькими запросами

Так что мой вопрос в том,

Это веб-сайт бронирования мини-гостиниц. У меня есть таблицы VEHICLES. В этой таблице у меня 4 автомобиля. Салон, поместье, MPV, микроавтобус. Эти транспортные средства имеют такие значения, как пассажиры и багажная емкость и т. Д. Следующим образом;

  • седан => Пассажиры = 4 и luggage_capacity = 5
  • недвижимости => Пассажиры = 4 и luggage_capacity = 8
  • MPV => Пассажиры = 6 и luggage_capacity = 10
  • Микроавтобус => пассажиры = 10 и luggage_capacity = 30

Теперь, когда посетитель вводит информацию о том, сколько пассажиров и сколько багажных, Sql запрос должен вернуть правильный автомобиль для указанной информации.

Пример: Посетитель Выбирает 3 пассажиров и 5 багаж. Это должно вернуть автомобиль SALOON. Если пассажирам 6, и нет багажа, MPV должен вернуться как результат и так далее.

Я пробовал выполнить следующий запрос sql, но отображается неправильный автомобиль.

SELECT name FROM vehicles WHERE passengers >= $passengers 
AND luggage_capacity >= $luggage_capacity 

Надеюсь, я мог бы объяснить, что я имел в виду. Любая помощь приветствуется.

+1

Вы должны заказать свои результаты, попробуйте '' ORDER BY пассажиров ASC, luggage_capacity ASC'' – arma

+0

Спасибо. Это сработало для меня – Vurkac

ответ

2

вам необходимо заказать и ограничения, если вы хотите только одно транспортное средство:

SELECT name FROM vehicles WHERE passengers >= '$passengers' AND luggage_capacity >= '$luggage_capacity' ORDER BY passengers ASC, luggage_capacity ASC LIMIT 1 
0

Я предполагаю, что различные значения емкости в базе данных сохраняются как строки, а не числа. Вы можете исправить это в запросе, используя бесшумный преобразование:

SELECT name 
FROM vehicles 
WHERE passengers + 0 >= $passengers AND 
     luggage_capacity + 0 >= $luggage_capacity; 

Если это проблема, было бы лучше, чтобы исправить таблицу:

alter table vehicles modify column passengers int; 
alter table vehicles modify column luggage_capacity int; 
0

Вы действительно дают значения по умолчанию к $passangers и $luggage_capacity переменные, которых я надеюсь, и они целые.

Также результат этого запроса может дать вам несколько результатов и в неправильном порядке. Вы должны заказать за столом так, как вы хотите, и только выбрать наименьшую подходящую машину, что-то вроде этого:

SELECT `name` FROM `vehicles` WHERE `passengers` >= $passengers AND `luggage_capacity` >= $luggage_capacity ORDER BY `passengers`, `luggage_capacity` LIMIT 1; 

Это заказ таблицы транспортных средств в порядке возрастания первых пассажиров и во-вторых, luggage_capacity, выберите первый, чтобы соответствовать и вернуть только это, не все. Если результат не найден, возвращается пустой набор результатов. Я протестировал запрос и работал, как вы просили.

0
# Run from the console 

set @p=3; 
set @l=5; 

select * 
    from `vehicles` 
    where `passengers` >= @p and `luggage_capacity` >= @l 
    order by `passengers` 
    limit 1; 


+----+---------+------------+------------------+ 
| id | name | passengers | luggage_capacity | 
+----+---------+------------+------------------+ 
| 1 | Saloon |   4 |    5 | 
+----+---------+------------+------------------+ 
Смежные вопросы