Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: как сделать вчерашнюю дату
 
 автор: Stasycat   (24.06.2008 в 09:11)   письмо автору
 
 

У меня есть архив сообщений. Мне бы хотелось на главной странице выводить свежие новости, т.е. за СЕГОДНЯ и ВЧЕРА. С сегодняшним числом нет проблем, а вот как сделать выборку по дате "вчера"?
Как из "даты на текущий момент" вычесть 1 день?

   
 
 автор: Stasycat   (24.06.2008 в 09:38)   письмо автору
 
   для: Stasycat   (24.06.2008 в 09:11)
 

Уже сделала сама. Вот:

$data_last_y = date("Y");
$data_last_m = date("m");
$data_last_d = date("d")-1;
$data_last = ("$data_last_y-$data_last_m-$data_last_d");

   
 
 автор: Trianon   (24.06.2008 в 09:55)   письмо автору
 
   для: Stasycat   (24.06.2008 в 09:38)
 

В первых числах месяца такой финт не пройдет.
Если Вы готовите дату для MySQL, лучше написать прямо
SELECT ..... WHERE DATE(`dt`) = DATE( NOW() - INTERVAL 1 DAY )

   
 
 автор: Stasycat   (24.06.2008 в 14:20)   письмо автору
 
   для: Trianon   (24.06.2008 в 09:55)
 

У меня такой фотмат не прокатывает.
Во-первых date просит, а не DATE. А во-вторых - это что за INTERVAL, где про него почитать можно?

   
 
 автор: AcidTrash   (24.06.2008 в 14:23)   письмо автору
 
   для: Stasycat   (24.06.2008 в 14:20)
 

[поправлено модератором]

   
 
 автор: Stasycat   (24.06.2008 в 15:21)   письмо автору
 
   для: AcidTrash   (24.06.2008 в 14:23)
 

[поправлено модератором]

   
 
 автор: AcidTrash   (24.06.2008 в 15:30)   письмо автору
 
   для: Stasycat   (24.06.2008 в 15:21)
 

Глаза раскройте
http://dev.mysql.com/doc/
Найдете и на русском, правда архив скачать надо.
А так можно и учебник по MYSQL купить.
Например http://softtime.ru/sql/?id_article=104

   
 
 автор: Stasycat   (24.06.2008 в 16:51)   письмо автору
 
   для: AcidTrash   (24.06.2008 в 15:30)
 

[поправлено модератором]

   
 
 автор: Trianon   (24.06.2008 в 17:01)   письмо автору
 
   для: Stasycat   (24.06.2008 в 16:51)
 

Не надо так нервничать.
http://www.mysql.ru/docs/man/Date_and_time_functions.html
абзац, начиная с функции DATE_ADD(date,INTERVAL expr type)
http://dev.mysql.com/doc/refman/5.0/en/date-and-time-functions.html#function_date-add

   
 
 автор: AcidTrash   (24.06.2008 в 17:02)   письмо автору
 
   для: Stasycat   (24.06.2008 в 16:51)
 

[поправлено модератором]

   
 
 автор: Stasycat   (24.06.2008 в 17:19)   письмо автору
 
   для: AcidTrash   (24.06.2008 в 17:02)
 

[поправлено модератором]

   
 
 автор: Trianon   (24.06.2008 в 17:29)   письмо автору
 
   для: Stasycat   (24.06.2008 в 17:19)
 

для начала, покажите структуру таблицы...
а заодно и запрос, который выводит данные "за сегодня". Я так понимаю, с ним у Вас проблем нет.

   
 
 автор: Stasycat   (24.06.2008 в 17:31)   письмо автору
 
   для: Trianon   (24.06.2008 в 17:29)
 


<p><br />СЕГОДНЯ:
<?php
print "<form action='vnutr_zayavki_open.php' method='get'>";
$data_now date("Y-m-d");    
$query_t "select * from vnutr_zayavki";
$result_t mysql_query($query_t) or die($query_t);
while (
$row_t mysql_fetch_array($result_t))
    {
    if (
$row_t["data_vnutr_zayavki"]==$data_now)
                       {
      
$n_vnutr_zayavki $row_t["n_vnutr_zayavki"];
      
$password=$row_t["password_vnutr"];      
      if (
$n_vnutr_zayavki!=$n_vnutr_zayavki_vyvod)
                                             {
          
$n_vnutr_zayavki_vyvod=$n_vnutr_zayavki;
          
$obekt_id=$row_t["id_obekta"];
          
$query_o "select * from obekty";
          
$result_o mysql_query($query_o) or die($query_o);
          while (
$row_o mysql_fetch_array($result_o))
                               {
              if (
$row_o["id_obekta"]==$obekt_id){$nazv_obekta=$row_o["poln_nazv_org"];}
              }
          print 
"<a href=http://www.root5.ru/vnutr/vnutr_zayavki_open.php?n_zayavki=$n_vnutr_zayavki&password=$password>
          заявка № 
$n_vnutr_zayavki_vyvod &nbsp;&nbsp;&nbsp; ($nazv_obekta)</a><br />";
              
          }
      }
  }
print 
"<a href=http://www.root5.ru/vnutr/vnutr_zayavki_new.php?data=$data_now> добавить </a><br />";
print 
"</form>";
?>
</p>

   
 
 автор: Trianon   (24.06.2008 в 17:57)   письмо автору
 
   для: Stasycat   (24.06.2008 в 17:31)
 

Если Вам абсолютно всё равно, как будет достигнут результат ( а автору этого скрипта именно так и было), то проще всего добавить зависимость от дня - так:
Вот эту строку $data_now = date("Y-m-d"); поменять на
$days  = -2; 
$data_now = date("Y-m-d", time() + $days * 24 * 3600);

в данном случае -2 будет означать запрос заявок двухсуточной давности.

[поправлено модератором]

   
 
 автор: Stasycat   (25.06.2008 в 09:12)   письмо автору
 
   для: Trianon   (24.06.2008 в 17:57)
 

2-ухдневная давность мне не нужна. Мне ВЧЕРАШНИЕ нужны, а не за вчера и сегодня.

[поправлено модератором]

   
 
 автор: Trianon   (25.06.2008 в 10:23)   письмо автору
 
   для: Stasycat   (25.06.2008 в 09:12)
 

скрипт выдает данные за позавчера.
Поменяете -2 на -1 - станет выдавать за вчера.
поменяете на 0 - станет выдавать за сегодня.

Вывод сделан в результате анализа скрипта.
Скрипт этот сапрашивает у SQL-сервера все записи из таблицы vnutr_zayavki, в то время как нужны ему лишь записи за определенный день. И потом на уровне php пропускает большую часть запрошенного.
Для каждой из оставшихся записей, он формирует отдельные запросы к SQL, причем запросы совершенно одинаковые - на всю таблицу, а не на конкретный id_obekta . И получая (на каждом цикле!) полную таблицу данных, опять таки пропускает большую их часть.

Вместо всего этого безобразия почти наверняка достаточно одного запроса, что-то вроде

SELECT vz.*, o.* 
   FROM vnutr_zayavki AS vz
    JOIN      obekty  AS o 
      ON      vz.id_obekta = o.id_obekta
  WHERE   DATE(`data_vnutr_zayavki`) = DATE(NOW() - INTERVAL 1 DAY)
      AND vz.n_vnutr_zayavki <> $n_vnutr_zayavki_vyvod

   
 
 автор: Stasycat   (25.06.2008 в 10:50)   письмо автору
 
   для: Trianon   (25.06.2008 в 10:23)
 

Я же написала КРОМЕ ВЫБОРКИ SELECT ... WHERE ...
дело в том, что у меня не работает выборка с where, также как и UPDATE ... SET ...
Я перепробовала уже все варианты. Я не знаю, что за версия у меня такая странная. Не работает. Пишу
$query = "UPDATE zayavki SET tsena='$cost'  WHERE id_zayavki='$id'";
$result = mysql_query($query) or die("Запрос ошибочный");
$query_t = "select * from zayavki WHERE id_zayavki='$id'";
$result_t = mysql_query($query_t) or die("Запрос ошибочный");


Не отбирает по where, как только я не меняла кавычки и скобки. Поэтому я не могу сделать короче. Ведь сама не глупая, понимаю, что так легче и проще. Но не пашет так (аж слёзы наворачиваются). Приходится выкручиваться циклами всякими.
Может, Вы сталкивались с такой же проблемой?

   
 
 автор: Trianon   (25.06.2008 в 11:11)   письмо автору
 
   для: Stasycat   (25.06.2008 в 10:50)
 

И в phpMyAdmin тоже не проходят такие запросы?

Если бы Вы прикрепили архив с дампом таблицы (в phpMyAdmin его можно получить из вкладки Экспорт) , можно было бы попытаться выяснить, что за беда настигла Вашу базу.

   
 
 автор: Stasycat   (26.06.2008 в 11:05)   письмо автору
321.7 Кб
 
   для: Trianon   (25.06.2008 в 11:11)
 

Вот арив экспортированный из моего phpMyAdmin - 2.9.0-rc1

Если чем-то можете помочь, буду рада :-)
А то я прошлый сайт делала с выборкой всё работало, а здесь не хочет.
Но делала на другом сервере. Может в этом дело?

   
 
 автор: Trianon   (26.06.2008 в 18:49)   письмо автору
 
   для: Stasycat   (26.06.2008 в 11:05)
 

Насколько я понимаю, у Вас кодировка, декларированная в БД и в таблицах, не соответствует фактической кодировке, в которой хранится в полях текст.
phpMyAdmin в них показывает форменную галиматью.
Конечно же WHERE, сравнивающие текстовые поля со строками, пропускать записи не будут.
Что вовсе не означает что WHERE не работают вообще.
Сравнение id с числом выполняется замечательно.

Вероятно, ранее Вы работали с серверами версии ниже 4.1 - там кодировки вообще никак не специфицируются.

   
 
 автор: Trianon   (27.06.2008 в 22:41)   письмо автору
294.9 Кб
 
   для: Trianon   (26.06.2008 в 18:49)
 

Дамп в кодировке cp1251 с соответствующим содержимым я на всякий случай прикрепил к сообщению.

   
 
 автор: mihdan   (25.06.2008 в 16:54)   письмо автору
 
   для: Stasycat   (25.06.2008 в 10:50)
 

<?
$query 
"UPDATE `zayavki` SET `tsena`='$cost'  WHERE `id_zayavki`=$id";
?>

   
 
 автор: Stasycat   (24.06.2008 в 17:33)   письмо автору
 
   для: Trianon   (24.06.2008 в 17:29)
 

Выводятся заявки, которые составили сегодня, вернее ссылки на эти заявки.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования