За последние 24 часа нас посетили 55112 программистов и 1724 робота. Сейчас ищут 1755 программистов ...

Сравнение настоящего времени с временем в БД и вывод.

Тема в разделе "PHP для новичков", создана пользователем Zerox, 29 апр 2012.

  1. Zerox

    Zerox Активный пользователь

    С нами с:
    18 янв 2010
    Сообщения:
    123
    Симпатии:
    0
    В таблице находятся телепередачи (телепрограмма).
    Нужно найти телепередачу, которая идет сейчас (в таблице есть столбец time), вывести её, вывести две записи до неё и две после.
    Предложения?
     
  2. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    Я бы выкинул из твоего условия вторую часть. Интуиция и опыт подсказывают, что надо искать вхождение в некий интервал времени, например сейчас-1час и сейчас+1час. Так будет и проще и ближе к реальному выводу результатов. У тебя ведь скорее всего будет некая временная шкала на которой отражаются передачи.
    Отображаемое временное окно это время от t1 до t2. А не от минус двух передач до плюс двух передач, верно? )))

    В итоге останется задача на пересечение двух временных отрезков t1..t2 и время_передачи..время_передачи_плюс_длительность.
    Код (Text):
    1. (cast_start BETWEEN :t1 AND :t2) OR (cast_start+cast_length BETWEEN :t1 AND :t2)
    Добавлено спустя 3 минуты 57 секунд:
    Так ты найдешь множество передач, попадающих в окно. Уже при выводе на страницу отмечаешь, цветом или как еще, ту единственную, которая идет сейчас, т.е.для которой
    Код (Text):
    1. $now >= $cast_start && $now <= $cast_start + $cast_len
     
  3. Zerox

    Zerox Активный пользователь

    С нами с:
    18 янв 2010
    Сообщения:
    123
    Симпатии:
    0
    Вообще я уже начал делать) И сделал немного по другому.
    Код (Text):
    1. while ($row2 = mysql_fetch_assoc($sql2)) {
    2.     if(date("H:i:s") > $old_time && $row2['time'] > date("H:i:s")){
    3.         $prev = $row2['Id']-2;
    4.         $next = $row2['Id']+3;
    5.         for($x = $prev; $x < $next; $x++){
    6.             $rel2[] = $row2;
    7.         }
    8.     }
    9.     $old_time = $row2['time'];      
    10. }
    Но конечно, у меня второй массив $rel2 заполняется одинаковыми записями, в которых нужный мне TIME.
    Расскажите, пожалуйста, как работает то, что вы написали. Я даже не знаю как тут воспользоваться поиском

    Добавлено спустя 2 минуты 25 секунд:
    И вообще я рассчитывал сделать всё-таки от -2 до 2 передач :D
    Не знаю, мб я конечно не прав)
     
  4. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    Похоже я зря потратил время. В игнор тебя!
     
  5. Zerox

    Zerox Активный пользователь

    С нами с:
    18 янв 2010
    Сообщения:
    123
    Симпатии:
    0
    Какая еще длина?
    Откуда я её возьму?
     
  6. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Держите в базе time(), а проверку назначайте в date() так и сверять будет легче.
    И быстрее, не будет костылей, всяких.

    типо:

    Код (PHP):
    1. Сегодня: date('d.m.Y',$row['date']);
    2.  
    3. if(time()>=$row['date'])
    4. {
    5.  
    6. } 
     
  7. Zerox

    Zerox Активный пользователь

    С нами с:
    18 янв 2010
    Сообщения:
    123
    Симпатии:
    0
    Да я уже нашел какая телепередача идет сейчас.
    Мне нужно добавить в массив две записи ДО записи с $Id и ПОСЛЕ записи с $Id
    Как выбрать из двумерного массива запись, в котором я знаю один столбец (id)?
     
  8. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Код (PHP):
    1. if()
    2. {
    3.      $id['do'][]=$row['id'];  //щас
    4. }else{
    5.      $id['after'][]=$row['id']; //далее
    6. } 
     
  9. Zerox

    Zerox Активный пользователь

    С нами с:
    18 янв 2010
    Сообщения:
    123
    Симпатии:
    0
    Что это?
    Имею двумерный массив.
    В этом массиве есть столбец Id.
    Мне нужно достать из него запись с конкретным значением Id.
    Как?
    Мне кажется, что
    Немного не то. Уж извиняйте...
     
  10. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Дурно!
    Я вас не понимаю...
    Что значит с конкретным значением?
    Разбирайте массив и сверяйте с тем, что щас идет за передача, я не знаю, что вы там изобретаете.

    Что за массив?!
    Откуда он и где он используется!?
    Если это $row2 который, то не вижу вообще никакого смысла, ибо у вас сравнивается по дате и выводится эта передача которая в данный момент и которых передач нет, все в else уходят.
     
  11. Zerox

    Zerox Активный пользователь

    С нами с:
    18 янв 2010
    Сообщения:
    123
    Симпатии:
    0
    Ну есть массив. Двумерный. Типа таблицы в MySQL. В этом массиве тоже есть столбец Id.
    Нужно достать из этого массива запись, у которой столбец Id равен некому $Id.

    Т.е. нужен эквивалент
    Код (Text):
    1. SELECT * FROM `table` WHERE `Id` = $Id
    только для массива
     
  12. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    г $massiv[$id];
     
  13. Zerox

    Zerox Активный пользователь

    С нами с:
    18 янв 2010
    Сообщения:
    123
    Симпатии:
    0
    Я думаю, суть в том, что массив двумерный. Потому что появляется ошибка
     
  14. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Массив то покажите, а? Или я должен гадать?
     
  15. Zerox

    Zerox Активный пользователь

    С нами с:
    18 янв 2010
    Сообщения:
    123
    Симпатии:
    0
    Все понял. У меня как-то странно достаются записи из БД. Если проблема не в этом - отпишусь.

    Добавлено спустя 2 минуты 52 секунды:
    Большой.
    Ага.
    Всё та же ошибка.
     
  16. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Код (PHP):
    1. $array=array(0=>array('id'=>1));
    2. foreach($array as $key => $value)
    3. {
    4.     if($value['id']==$id)
    5.     {
    6.  
    7.     }
    8. } 
     
  17. Zerox

    Zerox Активный пользователь

    С нами с:
    18 янв 2010
    Сообщения:
    123
    Симпатии:
    0
    фух.. ну наконец-то
    Благодарю) Удружил)