И опять Дата

Руслан

Новичок
И опять Дата

Задача такая.

надо вывести данные по датам из mysql за несколько дней отталкиваясь от введенной даты - назовем её "в.дата".

Хочу сделать через mysql запросы. Делаю примерно следующее.

PHP:
 for ($i = 1; $i <= 5; $i++) { 
  $grafikq = mysql_query("SELECT * FROM zayavka where spec=".$zayavka['spec']." and admdate="в.дата."+INTERVAL $i DAY");
На кавычки и мелкие синтаксические ошибки указывать в данный момент не стоит потому как меня интересует другое.

В данном случае выводится 4 строки данных начиная с в.даты.. А мне нужно сделать та что бы выводилось 4 строки, но начиная за день от в.даты т.е.

в.дата-1 день
в.дата
в.дата+1 день
в.дата+2 дня

как такой алгоритм выстроить на mysql запросах желательно с использованием вышеуказанного for.

Если пишу глупость или не вижу простого решения сильно не бейте - пишу всю ночь напролет. Может уже и спать пора.
 

Андрейка

Senior pomidor developer
PHP:
$b = 100;
for ($i = 1; $i <= 5; $i++) {
    echo ($b + $i)."\n";
}
вот тут выводятся "четыре" строки, начиная со "ста", а надо, чтобы с 99 выводилось.. как быть?
 

baev

‹°°¬•
Команда форума
Делаю примерно следующее.
Не надо постить «примерный» код.

Вот интересно: Вы же наверняка хотите увидеть точный ответ на свой вопрос, так почему сами даёте неполную информацию?

Кстати, Ваш пост — наглядный пример, почему тут на форумах не любят (мягко говоря) придуманные коды.
Во-первых, приведённый код нифига не выводит.
Во-вторых, даже если б и выводил, то — почему именно 4 строки? Счётчик ведь меняется от 1 до 5 включительно.
В-третьих, непонятно: откуда надобность делать 5 запросов к базе вместо одного? Вы не знаете, что такое LIMIT?

И при всём при этом Вы настаиваете на том, что использовать желательно именно этот непонятный цикл...
Ну и какой тут можно дать ответ?
 

Руслан

Новичок
То есть ты имеешь ввиду что средствами пхп надо отнять один день занести в переменную и работать с ней? Через запросы mysql или игры с for такое не получится?

Кстати мысль пришла. а что если сделать
PHP:
for ($i = -1; $i <= 3; $i++) { 
 $grafikq = mysql_query("SELECT * FROM zayavka where spec=".$zayavka['spec']." and admdate="в.дата."+INTERVAL $i DAY");
[php]
 
как думаете так не получится? сейчас попробую.

[size=1][i]-~{}~ 20.12.07  07:47:[/i][/size]

[b]baev[/b]
Точный ответ в виде кода мне не нужен. Мне нужнен вариант схемы.
1)Ни фига  не выводит - логично - там вывода нет впринципе.
2)В данном случае мне не важно 4 или 5 мне важно другое. Как сделать через for или запросы mysql что бы он выводил не только вперед но и за день назад.
3)При чем здесь лимит? Попробуйте сделать то что мне нужно с лимитом.. Каким образом вы будете менять интервал прибавляемый к дате 4 раза? Посредством чего? У меня в этом случае отрабатвает for который меняет $i. Может быть вы как то иначе видите - скажите.

Мне не нужно что бы мне написали код.. мне нужна схема. Вот Андрейка понял о чем я говорю..

[size=1][i]-~{}~ 20.12.07  08:32:[/i][/size]

Заодно объяснит может бытьмне кто нибудь тугодуму как работает вот такая композиция из мана:
[PHP]
<?php
$date = new DateTime("2006-12-12");
$date->modify("+1 day");
echo $date->format("Y-m-d");
?>
Я её пытаюсь применить в таком виде :
PHP:
$grafikdate=$zayavka['admdate'];
    $grafikdate->modify("+".$i." day");
    echo $grafikdate;
Но у меня она ругается вот такими бранными словами:
Fatal error: Call to a member function on a non-object in.. line 100
 

zerkms

TDD infected
Команда форума
1)Ни фига не выводит - логично - там вывода нет впринципе.
зачем тогда писать что выводит?

3)При чем здесь лимит? Попробуйте сделать то что мне нужно с лимитом.. Каким образом вы будете менять интервал прибавляемый к дате 4 раза? Посредством чего? У меня в этом случае отрабатвает for который меняет $i. Может быть вы как то иначе видите - скажите.
отнять 1 день, выбрать 4 записи

2)В данном случае мне не важно 4 или 5 мне важно другое. Как сделать через for или запросы mysql что бы он выводил не только вперед но и за день назад.
фор тебе не нужен

$date = new DateTime("2006-12-12");
$grafikdate=$zayavka['admdate'];
у тебя $zayavka['admdate'] это объект?

Fatal error: Call to a member function on a non-object in.. line 10
перевести в состоянии?
 

Фанат

oncle terrible
Команда форума
и всё это при том, что задача решается только средствами mysql, в одном запросе
 

baev

‹°°¬•
Команда форума
zerkms
И?
«Четыре строки» — чего? По одной записи за каждую дату? А сколько всего записей на каждую дату? По какому критерию эта одна выбирается? Или в одной строке все записи на эту дату выводятся? А если вообще записей на дату нет?

Вообще, конечно, вопросы — риторические. Тут особого телепатического дара не нужно, чтобы предположить, что автору достаточно одного запроса с 'GROUP BY admdate' и 'WHERE admdate in ...' (или WHERE admdate>... AND admdate<...).
 

Руслан

Новичок
Во во во ребята.. Вы приближаете меня к истине..
baev
Понимаю что описал не полностью задачу, но писал в 6:14 утра и zerkms меня тоже понял..

Особено заинтересовало то, что сказал Ф а н а т (надеюсь звездочками не закроется), но он не распространился. Ф а н а т - наведи снизошли на меня просветление каким образом сдлеть это через майэскюэл запрос?

Сейчас буду разбираться по той информации которую дал zerkms.

-~{}~ 21.12.07 17:29:

baev
Сейчас попробую твой вариант тоже.. Только мне вроде как GROUP не нужен будет, а вот с больше меньше.. надо попробовать..
Но суть в том что мне "фор" нужен еще для того что бы выводить 4 строки вне зависимости от того еслть ли в базе строка по этой дате или нет.. если нет - то для этой даты будет строка с данными "свободен" (то есть человек не занят на этот день) - это я график так делаю..
 

Фанат

oncle terrible
Команда форума

baev

‹°°¬•
Команда форума
Руслан, опишите задачу полностью.

(Неужели не очевидно, что чем полней постановка задачи, тем оптимальнее Вам тут её помогут решить?..)
 

Руслан

Новичок
Вот таким макаром сделал:
PHP:
   for ($i = -1; $i <= 3; $i++) { 
  $grafikq = mysql_query("SELECT * FROM zayavka where spec=".$zayavka['spec']."
 and admdate=DATE_ADD('".$zayavka['admdate']."', INTERVAL ".$i." day) and id!=".$zayavka['id']." and status!='новая'"); 
 $grafik = mysql_fetch_array($grafikq);

while ($grafik)     
 {    
  echo $grafik['id']."- ".$grafik['admdate'];    
     }      

  }
Запрос отрабатывает нормально.. сначала пробегает через i=-1 смотрит за день до в.даты .. потом i=0 - смотрит в день в.даты. и т.д. под каждый пробег i нарисую <tr><td>данные по дню (свободен ли занят, чем занят)</td></tr>.. Таким образом вот у меня получается то что яхочу.. очень помог Ф а н а т ссылкой на которой я нашел DATE_ADD, который и использовал.. Всем спасибо за советы. Такая задача у меня впервый раз встала.

Единственная сложность.. он когда находит совпадение начинает его бесконечно множество раз писать.. это с чем связанно? обязательно ли отрабатывать через нам роуз + фор или я чего то не учёл при работе с вайл?
 

Руслан

Новичок
О!! И точно! м-да, голова уже не варит.. Поехал ка я спать. zerkms Спасибо!!
 
Сверху