Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> выборка за период data, time, выборка 2008-07-23 22:00:00 - 2008-07-24 
:(
    Опции темы
PHPcoding
Дата 24.7.2008, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 24.7.2008

Репутация: нет
Всего: нет



Нужно сделать выборку допустим за период между 2008-07-23 22:00:00 - 2008-07-24 01:00:00 

По понятным причинам данный запрос не пашет. 
Как составить правельный запрос SQL:
Код

 SELECT date,time  FROM `calls` where (`date`  >=  '2008-07-23' and time >= '22:00:00') and (`date` <= '2008-07-24' and time <= '01:00:00')




PS в поиске конкретного ответа пока не нашел 
PM MAIL   Вверх
skyboy
Дата 24.7.2008, 14:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 41
Всего: 260



1. имена всех полей и таблиц в запросе заключаем в обратные апострофы.
2. для вычлениения временной части и даты из поля типа дата/время(datetime) используем функции date и time
я надеюсь, у тебя не в строковом типе поля хранится дата и время?
PM MAIL   Вверх
PHPcoding
Дата 24.7.2008, 15:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 24.7.2008

Репутация: нет
Всего: нет



Таблица такая. (На самом деле там есть еще несколько полей но они к условию where не относятся)
Код

CREATE TABLE `calls` (
  `id` bigint(20) NOT NULL auto_increment,
  `date` date default '2000-01-01',
  `time` time default '00:00:00',
  UNIQUE KEY `id` (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251; 
[B]

задача:[/B]
Нужно сделать выборку допустим за период между 2008-07-23 22:00:00 - 2008-07-24 01:00:00 *
PM MAIL   Вверх
skyboy
Дата 24.7.2008, 15:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 41
Всего: 260



Код

WHERE (`date`= '2008-07-23' AND `time` > '22:00:00') OR (`date`=  '2008-07-24'  AND `time` < '01:00:00')

PM MAIL   Вверх
PHPcoding
Дата 24.7.2008, 18:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 24.7.2008

Репутация: нет
Всего: нет



Цитата

Код

WHERE (`date`= '2008-07-23' AND `time` > '22:00:00') OR (`date`=  '2008-07-24'  AND `time` < '01:00:00')



да данный код справляется с данной задачей. 
Но у меня интервал может быть апсолютно любым. 
Программа должна работать с интервалами от нескольких минут до нескольких лет
PM MAIL   Вверх
skyboy
Дата 24.7.2008, 19:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 41
Всего: 260



PHPcoding, фокус-покус.
фокус в том, что если бы ты хранил дату и время в виде одного поля datetime, тебе не понадобились бы танцы с бубном.
положим, у нас необходимость посмотреть в диапазоне от даты d0 и времени t0 до даты d1 и времени t1
Код

WHERE (`date` > d1 AND `date` < d1) OR (`date` = d1 AND `time`> t1) OR (`date` = d2 AND `time`> t2)

как ни странно, но сие будет работать для "абсолютно любого интервала", при условии, что d2t2 > d1t1

Добавлено через 1 минуту и 4 секунды
можно слепить дату и время в datetime хотя бы при помощи str_to_date, но по-моему, это будет немного запутанно
PM MAIL   Вверх
PHPcoding
Дата 24.7.2008, 20:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 24.7.2008

Репутация: нет
Всего: нет



Код

Вот такой вот код
  $pattern = '|(([\d]{4})-([\d]{2})-([\d]{2})) ([\d]{2}:[\d]{2})|'; 
    preg_match($pattern, $_POST['raport_calend1'], $matches1); 
    preg_match($pattern, $_POST['raport_calend2'], $matches2); 

    $int1 = $matches1[2].$matches1[3].$matches1[4];
    $date1 = $matches1[1];
    $time1 = $matches1[5];
    
    $int2 = $matches2[2].$matches2[3].$matches2[4];
    $date2 = $matches2[1];
    $time2 = $matches2[5];
    $int = $int2-$int1;
    

    if($int >= 0){
        $sql = "SELECT date,time FROM `calls` where `date` >= '$date1' and  `time` >= '$time1' union ";
        if($int > 1){
            $sql .= "SELECT date,time FROM `calls` where `date` > '$date1' and  `date` < '$date2' union ";
        }
        $sql .= "SELECT date,time FROM `calls` where `date` <= '$date2' and  `time` <= '$time2'  limit 50000";
    }
    echo $sql;


При данных пост
Цитата
Array
(
    [raport_calend1] => 2008-07-22 13:20
    [raport_calend2] => 2008-07-24 13:20
)

получаем запрос
SQL
SELECT date,time FROM `calls` where `date` >= '2008-07-22' and `time` >= '13:20' union 
SELECT date,time FROM `calls` where `date` > '2008-07-22' and `date` < '2008-07-24' union 
SELECT date,time FROM `calls` where `date` <= '2008-07-24' and `time` <= '13:20' 


При данных пост
Цитата
Array
(
    [raport_calend1] => 2008-07-23 13:20
    [raport_calend2] => 2008-07-24 13:20
)

получаем запрос
SQL
SELECT date,time FROM `calls` where `date` >= '2008-07-23' and `time` >= '13:20' union SELECT date,time FROM `calls` where `date` <= '2008-07-24' and `time` <= '13:20'  limit 50000 


PS парсить все равно надо было. Так как данны вводятся с календаря на JS
PSS может кому пригодится. Пользуйтесь

Это сообщение отредактировал(а) PHPcoding - 24.7.2008, 20:10
PM MAIL   Вверх
Feldmarschall
Дата 24.7.2008, 20:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 3
Всего: 32



жесть.
а юнион-то тут зачем?
PM   Вверх
PHPcoding
Дата 24.7.2008, 20:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 24.7.2008

Репутация: нет
Всего: нет



Цитата

жесть.
а юнион-то тут зачем?

А ты можеш предложить вариант лутше???
PM MAIL   Вверх
Feldmarschall
Дата 24.7.2008, 20:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 3
Всего: 32



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


 




[ Время генерации скрипта: 0.0759 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.