BG Development


  Reply to this topicStart new topicStart Poll

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



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

Мнения: 290
Регистриран на: 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



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

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



вложена заявка ?


--------------------
Живота е спагети, кода за да работи добре трябва да го наподобява - Дон Реба
...
Живеем в греховни времена, какво очакваш богоугоден и благочестив код ли? - Дон Реба
...
много положителна енергия черпя от вас двамата,единият комунистически девствен,другият яко яхнал асемблерните розови понита - saruman
...
Рано или късно усерите на Виндофс разбират че стоят от неправилната страна на хуя. - ici
PM
Top
kierenski
Публикувано на: 12-09-2017, 07:35
Quote Post



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

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



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



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

Мнения: 867
Регистриран на: 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