Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
Страницы: (3) [1] 2 3  ( Перейти к первому непрочитанному сообщению )  
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> Создание вложенного запроса
masterlelik  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Пользователь
**

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 98
Пользователь №: 1297
На форуме: 10 лет, 3 месяца, 16 дней
Карма:




Просьба помочь создать запрос для следующей задачи.
В БД есть строки со следующими полями:
id | hotel_id | date_begin | date_end | price | currency
И, например, значениями

1 | 300 | 01.07.2016 | 09.07.2016 | 100 | usd
2 | 300 | 10.07.2016 | 19.07.2016 | 200 | usd
3 | 300 | 20.07.2016 | 29.07.2016 | 150 | usd

Пользователь вводит в поисковой форме разброс дат с 05.07.2016 по 21.07.2016
Количество дней: 7
и сумму за проживания от 1000 $ до 1500 $

В результате надо найти все отрезки дат подходящие под эти условия с подсчитанной суммой.
Например, первый найденный отрезок будет: с 06.07.2016 по 12.07.2016 и стоимостью проживания 1000 $



--------------------
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Kusss  
Дата
Цитировать сообщение

Пользователь сейчас на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1526
Пользователь №: 28976
На форуме: 5 лет, 9 месяцев, 27 дней
Карма: 89




Даты храните как текст, или есть возможность переделать это в нормальный формат SQL "date" ? XXX-XX-XX

PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Kusss  
Дата
Цитировать сообщение

Пользователь сейчас на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1526
Пользователь №: 28976
На форуме: 5 лет, 9 месяцев, 27 дней
Карма: 89




SELECT 
*
FROM
`table`
WHERE
STR_TO_DATE(date_begin, GET_FORMAT(DATE,'EUR')) >= STR_TO_DATE('05.07.2016', GET_FORMAT(DATE,'EUR')) AND
STR_TO_DATE(date_end, GET_FORMAT(DATE,'EUR')) <= STR_TO_DATE('21.07.2016', GET_FORMAT(DATE,'EUR')) AND
1000 <= (SELECT SUM(price*7) FROM `table`) <= 1500
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
masterlelik  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Пользователь
**

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 98
Пользователь №: 1297
На форуме: 10 лет, 3 месяца, 16 дней
Карма:




Цитата (Kusss @ 4.07.2016 - 18:14)
Даты храните как текст, или есть возможность переделать это в нормальный формат SQL "date" ? XXX-XX-XX

В таком формате и храню (формат поля DATE), это я для наглядности в таком виде отобразил даты)


--------------------
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
masterlelik  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Пользователь
**

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 98
Пользователь №: 1297
На форуме: 10 лет, 3 месяца, 16 дней
Карма:




Цитата (Kusss @ 4.07.2016 - 18:41)
  1000 <= (SELECT SUM(price*7) FROM `table`) <= 1500

Тут насколько я понимаю, будут выбираться только данные соответствующие каждой строки, но не сможет найти результирующую сумму для отрезка 06.07.2016 по 12.07.2016


--------------------
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Kusss  
Дата
Цитировать сообщение

Пользователь сейчас на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1526
Пользователь №: 28976
На форуме: 5 лет, 9 месяцев, 27 дней
Карма: 89




masterlelik
Да, я не правильно понял первоначальный вопрос.

Я бы сделал обработку средствами php.
В MySQL Выбирал бы отрезки дат совпадающие с запросом дат, и сумма меньше запроса.
Ну и далее в цикле перебор по дням до нужной суммы.

Цитата
Например, первый найденный отрезок будет: с 06.07.2016 по 12.07.2016 и стоимостью проживания 1000 $
а почему с 06, если выборка получается следующая
05.07 - 12.07 (500+600) и до 15.07 - 21.07 (1000+150)

Это сообщение отредактировал Kusss - 5.07.2016 - 10:48
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
masterlelik  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Пользователь
**

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 98
Пользователь №: 1297
На форуме: 10 лет, 3 месяца, 16 дней
Карма:




Цитата (Kusss @ 5.07.2016 - 06:47)
а почему с 06, если выборка получается следующая
05.07 - 12.07 (500+600) и до 15.07 - 21.07 (1000+150)

Потому что 12.07 - это уже будет 8й день.
Если с 05.07, то последний день будет 11.07 и всего тогда получится 900$

Цитата
Я бы сделал обработку средствами php.

в этом случае будут выбраны избыточные данные, наверняка можно сделать это запросом))


--------------------
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Kusss  
Дата
Цитировать сообщение

Пользователь сейчас на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1526
Пользователь №: 28976
На форуме: 5 лет, 9 месяцев, 27 дней
Карма: 89




Выборка будет маленькая.
У тебя в данном примере на выходе будет 2 строки.

И как ты собираешься обрабатывать конечную дату ?
Ведь по сути результат должен быть следующим.

06.07 - 12.07 : (400+600)= 1000
07.07 - 13.07 : (300 + 800) = 1100
08.07 - 14.07 : (200 + 1000) = 1200
09.07 - 15.07 : (100 + 1200) = 1300
10.07 - 16.07 : (1400) = 1400
11.07 - 17.07 : (1400) = 1400
12.07 - 18.07 : (1400) = 1400
13.07 - 19.07 : (1400) = 1400
14.07 - 20.07 : (1200 + 150) = 1350
15.07 - 21.07 : (1000 + 300) = 1300
PMПисьмо на e-mail пользователю
    1   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
masterlelik  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Пользователь
**

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 98
Пользователь №: 1297
На форуме: 10 лет, 3 месяца, 16 дней
Карма:




Цитата
Ведь по сути результат должен быть следующим.


Хорошо, спасибо


--------------------
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
S.Chushkin  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Пофигист
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 811
Пользователь №: 36058
На форуме: 4 года, 4 месяца, 29 дней
Карма: 42




Цитата (masterlelik @ 5.07.2016 - 11:19)
в этом случае будут выбраны избыточные данные, наверняка можно сделать это запросом))

Конечно можно, но... Kusss прав, алгоритм лучше сделать на PHP. Это проще и скорее всего работать будет быстрее.
А данных, передаваемых с SQL-сервера клиенту будет совсем мало. В примере, максимум это будет всего 17 строк, если данные в таблице хранятся подневно. А если попериодно (как в условии), то и того меньше. Для исходного примера весь алгоритм (вместе с запросом к SQL-серверу) будет выполняться 1-2 тысячных секунды.


--------------------
PM
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Valick  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 5618
Пользователь №: 35718
На форуме: 4 года, 6 месяцев, 6 дней
Карма: 173




Цитата (S.Chushkin @ 5.07.2016 - 12:30)
Kusss прав, алгоритм лучше сделать на PHP. Это проще и скорее всего работать будет быстрее.

глупости


--------------------
wmr - R281553014107
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
S.Chushkin  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Пофигист
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 811
Пользователь №: 36058
На форуме: 4 года, 4 месяца, 29 дней
Карма: 42




Цитата (Valick @ 5.07.2016 - 13:57)
глупости

Не-а.


--------------------
PM
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Guest  
Дата
Цитировать сообщение


Гость пожелал остаться неизвестным

Unregistered









я бы в пхп сделал временную таблицу со списком всех аозможных подходящих дат и потом уже делал основной запрос
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Valick  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 5618
Пользователь №: 35718
На форуме: 4 года, 6 месяцев, 6 дней
Карма: 173




Guest, бинго.


--------------------
wmr - R281553014107
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Valick  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 5618
Пользователь №: 35718
На форуме: 4 года, 6 месяцев, 6 дней
Карма: 173




S.Chushkin, соскучился?))) Я говорю про то, что если задача требует решения на РНР, то это одно из двух:
1 не хватает квалификации написать грамотный запрос.
2 не хватает квалификации грамотно организовать структуру БД.

ну и действительно часто забывают про временные таблицы


--------------------
wmr - R281553014107
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темыСтраницы: (3) [1] 2 3  Ответ в темуСоздание новой темыСоздание опроса