За последние 24 часа нас посетил 20621 программист и 1826 роботов. Сейчас ищут 1020 программистов ...

Помогите с запросом.

Тема в разделе "PHP и базы данных", создана пользователем Flip, 27 дек 2008.

  1. Flip

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

    С нами с:
    9 мар 2008
    Сообщения:
    42
    Симпатии:
    0
    Помогите составить запрос. Мне нужно из таблицы брать данные за неделю, только не за последние 7 дней, а именно с понедельника по воскресенье включительно. Т.е. когда начинается другая неделя, данные будут новые. Никак не могу додуматься до того, чтобы составить нужное условие. Вроде как, я полагаю, необходимо найти стартовую точку (а это понедельник) и с соответствующим интервалом (date('w')). А может и не так мыслю...

    Вообщем выручайте.
     
  2. AlexGousev

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

    С нами с:
    25 мар 2006
    Сообщения:
    1.505
    Симпатии:
    0
    Адрес:
    Москва
    Если за текущую неделю, то:
    1. Узнать метку времени на начало недели.
    2. Выбрать записи, у которых метка времени больше.

    Если за прошедшую, то:
    1. Узнать метку времени на начало недели.
    2. Узнать метку времени на конец недели.
    3. Выбрать записи, у которых метка времени между этими значениями.

    Узнать метку времени можно с помощью date и mktime
     
  3. Flip

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

    С нами с:
    9 мар 2008
    Сообщения:
    42
    Симпатии:
    0
    AlexGousev спасибо.
    Вот тут мне никак не додуматься, как узнать дату текущего понедельника в какой бы это день не было? Ведь при наступлении следующего понедельника метка времени должна автоматически изменяться. ))
     
  4. armadillo

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

    С нами с:
    6 апр 2007
    Сообщения:
    2.380
    Симпатии:
    0
    Адрес:
    Russia, Moscow
    ну так задачу ты сформулировал - найти дату прошедшего понедельника.
    решай.
     
  5. Flip

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

    С нами с:
    9 мар 2008
    Сообщения:
    42
    Симпатии:
    0
    я, наверное, тугодум, но другого решения ну никак не найти =/
    PHP:
    1. <?php
    2.  
    3. $day1 = date("w");
    4. $day2 = date("Y-m-d", mktime(0, 0, 0, date("m"), date("d"), date("Y")));
    5.  
    6. if($day1 == 1)
    7. {
    8.     $d = $day2;
    9. }
    10. elseif($day1 == 2)
    11. {
    12.     $d = date("Y-m-d", mktime(0, 0, 0, date("m"), date("d")-1, date("Y")));
    13. }
    14. elseif($day1 == 3)
    15. {
    16.     $d = date("Y-m-d", mktime(0, 0, 0, date("m"), date("d")-2, date("Y")));
    17. }
    18. elseif($day1 == 4)
    19. {
    20.     $d = date("Y-m-d", mktime(0, 0, 0, date("m"), date("d")-3, date("Y")));
    21. }
    22. elseif($day1 == 5)
    23. {
    24.     $d = date("Y-m-d", mktime(0, 0, 0, date("m"), date("d")-4, date("Y")));
    25. }
    26. elseif($day1 == 6)
    27. {
    28.     $d = date("Y-m-d", mktime(0, 0, 0, date("m"), date("d")-5, date("Y")));
    29. }
    30. elseif($day1 == 0)
    31. {
    32.     $d = date("Y-m-d", mktime(0, 0, 0, date("m"), date("d")-6, date("Y")));
    33. }
    34.  
    35. ?>
    p.s. не покидает мысль, что можно сделать все по-другому...
     
  6. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    PHP:
    1. <?php
    2. if($day1 == 1)
    3. {
    4.     $d = $day2;
    5. }
    6. elseif($day1 == 2)
    7. {
    8.     $d = date("Y-m-d", mktime(0, 0, 0, date("m"), date("d")-1, date("Y")));
    9. }
    10. elseif($day1 == 3)
    11. {
    12.     $d = date("Y-m-d", mktime(0, 0, 0, date("m"), date("d")-2, date("Y")));
    13. }
    14. elseif($day1 == 4)
    15. {
    16.     $d = date("Y-m-d", mktime(0, 0, 0, date("m"), date("d")-3, date("Y")));
    17. }
    18. elseif($day1 == 5)
    19. {
    20.     $d = date("Y-m-d", mktime(0, 0, 0, date("m"), date("d")-4, date("Y")));
    21. }
    22. elseif($day1 == 6)
    23. {
    24.     $d = date("Y-m-d", mktime(0, 0, 0, date("m"), date("d")-5, date("Y")));
    25. }
    26. elseif($day1 == 0)
    27. {
    28.     $d = date("Y-m-d", mktime(0, 0, 0, date("m"), date("d")-6, date("Y")));
    29. }
    В плане объемности этот код можно заменить на этот:
    PHP:
    1.  
    2. <?php
    3. if($day1 == 1)
    4. {
    5.     $d = $day2;
    6. }
    7. elseif($day1 == 0)
    8. {
    9.     $d = date("Y-m-d", mktime(0, 0, 0, date("m"), date("d")-6, date("Y")));
    10. }
    11. else
    12. {
    13.     $d = date("Y-m-d", mktime(0, 0, 0, date("m"), date("d")-$day1-1, date("Y")));
    14. }
    А вообще, если выборка из Mysql - http://www.mysql.ru/docs/man/Date_and_t ... tions.html
    Еще можно так:
    PHP:
    1. <?php
    2. echo 'От '.date("Y-m-d", strtotime("Monday", time()-3600*24*6)).' до '.date("Y-m-d", strtotime("Sunday"));
     
  7. Flip

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

    С нами с:
    9 мар 2008
    Сообщения:
    42
    Симпатии:
    0
    Kreker, огромное спасибо! Действительно, как всё просто ))