BG Development


  Reply to this topicStart new topicStart Poll

> Кои хотели имат свободни стаи за тези дни, Заявка Много към Много
SveXteZ
Публикувано на: 11-09-2017, 19:53
Quote Post



Име:
Група: Потребител
Ранг: Активен

Мнения: 294
Регистриран на: 15.08.08



Здравейте,
Опитвам се да намеря за 29.09 и 30.09 кои хотели са свободни от 9:30 до 15:00 часа.
Имам следната ултра опростена структура на БД:
user posted image
Заявката ми е в следния вид
SQL
SELECT hotel.id, hotel.name,hotel_schedule.from FROM hotel INNER JOIN hotel_schedule ON (hotel_schedule.relation_id = hotel.id) WHERE (hotel_schedule.from style='color:orange'><= 1506666600 AND hotel_schedule.to >= 1506686400) AND (hotel_schedule.from style='color:orange'><= 1506763800 AND hotel_schedule.to >= 1506771000) GROUP BY hotel.id


Имам следните ситуации:
29.09 - 10:00 - 14:30
30.09 - 10:00 - 14:30
При тези стойности трябва да ми BSP & GERB

29.09 - 10:00 - 14:30
30.09 - 22:00 - 23:59
При тези стойности трябва да ми върне нищо. ( GERB работят на 30ти до 21:00 часа, а БСП до 16:00. Ако хотела не е свободен и двата дни, не го връщай )

29.09 - 10:00 - 14:30
30.09 - 03:00 - 06:00
При тези стойности трябва да ми върне само GERB ( БСП работят от 08:00 )

29.09 - 10:00 - 14:30
30.09 - 17:00 - 20:00
При тези стойности трябва да върне само GERB ( БСП работят до 16:00 )

Ето ги и timestamp-овете ако искате да си симулирате БД:
CODE

hotel_schedule:
id:1 | relation_id: 1 | from: 1506718800 | to: 1506794400
id:2 | relation_id: 1 | from: 1506632400 | to: 1506715200
id:3 | relation_id: 2 | from: 1506747600 | to: 1506776400


Един приятел ми предложи следното решение:
SQL
SELECT hotel_schedule.relation_id, COUNT(*) as `counter` FROM hotel_schedule WHERE (hotel_schedule.from style='color:orange'><= 1506666600 AND hotel_schedule.to >= 1506686400) AND (hotel_schedule.from style='color:orange'><= 1506763800 AND hotel_schedule.to >= 1506771000) GROUP BY hotel_schedule.relation_id HAVING counter = 2 ( броя търсени дни )

След което взимам само ID-ата и ги давам на другата заявка
SQL
SELECT hotel.* FROM hotel WHERE hotel.id IN ( списък с ID-ата от предишната заявка )

Но не ми харесва това да правя две заявки, а и това ще е отправна точка в проекта и потребителя ще минава много често от тук и трябва да става бързо.


Някой може ли да ми даде предложение как да си оправя проблема със само 1 заявка ?
PMEmail Poster
Top
Bender
Публикувано на: 11-09-2017, 20:45
Quote Post



Име:
Група: Форумен член
Ранг: Почетен член

Мнения: 4993
Регистриран на: 19.06.14



Господи, колко се умножиха враговете ми! Мнозина въстават против мене;
2. мнозина казват за душата ми: за него спасение няма в Бога.
3. Но Ти, Господи, си щит пред мене, моя слава, и Ти въздигаш главата ми.
4. С гласа си викам към Господа, и Той ме чува от светата Си планина.
5. Лягам, спя и ставам, защото Господ ме закриля.
6. Няма да се уплаша от десетки хиляди люде, които отвред са се опълчили против мене.
7. Стани, Господи! спаси ме, Боже мой! защото Ти удряш по лицето всички мои врагове и трошиш зъбите на нечестивите.
8. От Господа е спасението. Върху Твоя народ е Твоето благословение.



Това мнение е било редактирано от Bender на 07-01-2018, 20:12
PM
Top
kierenski
Публикувано на: 12-09-2017, 07:35
Quote Post



Име:
Група: Потребител
Ранг: Посетител

Мнения: 140
Регистриран на: 10.01.16



вложена заявка или другият начин е да точиш купчина данни от таблиците и после ги филтрираш външно.
PMEmail Poster
Top
thrawn
Публикувано на: 12-09-2017, 08:37
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 1168
Регистриран на: 17.01.17



PMEmail Poster
Top
1 потребители преглеждат тази тема в момента (1 гости, 0 анонимни потребители)
Потребители, преглеждащи темата в момента:

Topic Options Reply to this topicStart new topicStart Poll

 


Copyright © 2003-2015 | BG Development | All Rights Reserved
RSS 2.0