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

Форум MySQL

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

 

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

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: ДАТЫ. выборка и запись в MySQL / условие сравнения с датой PHP

Сообщения:  [1-10]    [11-20]  [21-25] 

 
 автор: bill   (09.02.2008 в 11:12)   письмо автору
 
   для: bill   (07.02.2008 в 22:50)
 

Сразу скажу, СПАСИБО всем тем кто имел терпение выслушать мой ламерский бред и попытался помочь.
Выкладываю скрипт который вывод нужную мне информацию по средним ценам и записывает эти средние цены ОДИН раз в сутки в базу.

$query = "SELECT raion, AVG(price) FROM basa WHERE basa.kom = '3' and basa.price > '0' GROUP BY id_type";
$result = mysql_query($query) or die(mysql_error());
$query2 = "SELECT raion, price FROM informer3 WHERE TO_DAYS(NOW()) - TO_DAYS(data) = 7";
$result2 = mysql_query($query2) or die(mysql_error());


while($ro = mysql_fetch_array($result2) and $row = mysql_fetch_array($result))
{
$rew=(int)$row['AVG(price)']; // средняя цена иза ОБЩЕЙ базы по 3-х комн. квартирам.
$ris=(int)$ro['price']; // берёт цены из базы ИНФОРМЕРА_3
$raznica = $rew - $ris; // сред.Цена - цена ИНФОРМЕРА_3
$proc1 = $rew / 100; //
$itogi = $raznica / $proc1;
$itog = round($itogi, 1);
$raion = $row['raion'];


echo "<table width='270' border='0' class='style96'><tr><td width='10' ></td><td width='50' background='images/nav/hik_z1.gif'>
&nbsp;". $row['raion']. "</td><td width='10'></td><td width='10' align='center' background='images/nav/hik_z1.gif'>
".(int)$row['AVG(price)']."&nbsp;p.</td><td width='10' ></td><td width='50' >".$itog." % </td><td width='20' ></td></tr></table> ";




}

$query4 = "SELECT raion, AVG(price) FROM basa WHERE basa.kom = '3' and basa.price > '0' GROUP BY id_type";
$result4 = mysql_query($query4) or die(mysql_error());
$query5 = "SELECT raion, price FROM informer3 WHERE TO_DAYS(NOW()) - TO_DAYS(data) = 7";
$result5 = mysql_query($query5) or die(mysql_error());

$sql = "SELECT (MAX(data) = curdate() ) as up_to_date FROM informer3";
if(!mysql_result(mysql_query($sql), 0, 'up_to_date'))
while($ro2= mysql_fetch_array($result5) and $row2 = mysql_fetch_array($result4)) {

$ris=(int)$ro2['price'];
$raion = $row2['raion'];
$rew=(int)$row2['AVG(price)'];



mysql_query("INSERT INTO informer3 (raion,price,data)
VALUES ('$raion', '$rew', curdate())"); }


// Осуществляем перезагрузку страницы,
// чтобы сбросить POST-данные
echo "<HTML><HEAD>
<META HTTP-EQUIV='Refresh'; URL=$_SERVER[PHP_SELF]'>
</HEAD></HTML>";

Надеюсь и я чем то смогу помочь начинающим. (хотябы тем что покажу как Делать НЕнужно!) +)

От ГУРУ жду критики и замечаний по скрипту, ОЧЕНЬ буду за это благодарен.
ВСем большое Респект!. особенно Trianon

   
 
 автор: bill   (07.02.2008 в 22:50)   письмо автору
 
   для: Trianon   (07.02.2008 в 21:00)
 

>поставьте проверку условия перед циклом.
А не подскажите как это сделать??
>Хотя это Вас не спасет. Выборка из верхних двух селектов у Вас не синхронна, а случайна.
не понял не про селекторы не про синхронность... Если можно более развёрнуто было бы классно....
>Вы считаете ерунду.

Trianon спасибо за Вашу помощь которая мне сильно помогает в освоении дисциплины.


П.С. я добился нужного результат но чую что способ не оптимален.. Завтра выложу свой скрипт сюда, для критики и замечаний. =)

   
 
 автор: Trianon   (07.02.2008 в 21:00)   письмо автору
 
   для: bill   (07.02.2008 в 15:12)
 

поставьте проверку условия перед циклом.
Хотя это Вас не спасет. Выборка из верхних двух селектов у Вас не синхронна, а случайна.
Вы считаете ерунду.

   
 
 автор: bill   (07.02.2008 в 15:12)   письмо автору
 
   для: bill   (07.02.2008 в 14:16)
 

ЛЮДИиии Помогите... чуть чуть осталось скрипт подправить и у меня будет всё готово. САм немогу понять где ошибка. Помощи прошу...
Не оставляйте пожалусто мою просьбу без внимания.

Спасибо.

   
 
 автор: bill   (07.02.2008 в 14:16)   письмо автору
 
   для: bill   (07.02.2008 в 11:02)
 

СКРИПТ заносит в базу только ОДНИ строчку. а должен заносить 7 строк.
(массив).
Конкретно заноситься строка ('206, 'Центр', '1800', '2008-02-07');

А мне нужно чтобы заносились ВСЕ районы (7 штук) и соответственно все цены.

Я так предполагаю что у меня какието проблемы в ЦЫКЛЕ.
ГУРУ подскажите на что обратить внимание.
Привожу весь код:

$query = "SELECT raion, AVG(price) FROM basa WHERE basa.kom = '3' GROUP BY id_type";
$result = mysql_query($query) or die(mysql_error());
$query2 = "SELECT raion, price FROM informer3 WHERE TO_DAYS(NOW()) - TO_DAYS(data) = 5";
$result2 = mysql_query($query2) or die(mysql_error());

while($ro = mysql_fetch_array($result2) and $row = mysql_fetch_array($result))
{
$rew=(int)$row['AVG(price)']; // средняя цена иза ОБЩЕЙ базы по 3-х комн. квартирам.
$ris=(int)$ro['price']; // берёт цены из базы ИНФОРМЕРА_3
$raznica = $rew - $ris; // сред.Цена - цена ИНФОРМЕРА_3
$proc1 = $rew / 100; //
$itogi = $raznica / $proc1;
$itog = round($itogi, 1);
$raion = $row['raion'];

echo "<table width='270' border='0' class='style96'><tr><td width='10' ></td><td width='50' background='images/nav/hik_z1.gif'>
&nbsp;". $row['raion']. "</td><td width='10'></td><td width='10' align='center' background='images/nav/hik_z1.gif'>
".(int)$row['AVG(price)']."&nbsp;p.</td><td width='10' ></td><td width='50' >".$itog." % </td><td width='20' ></td></tr></table> ";



$sql = "SELECT (MAX(data) = curdate() ) as up_to_date FROM informer3";
if(!mysql_result(mysql_query($sql), 0, 'up_to_date'))
mysql_query("INSERT INTO informer3 (raion,price,data)
VALUES ('$raion', '$ris', curdate())");
}


П,С, таблица с результатами должна быть видна на Странице ВСЕГДА а в бузу писаться результат РАЙОН + СредниеЦЕНЫ долен ОДИН раз в СУТКИ.



ХЭЛП.. помогите Понять в чём проблема...

   
 
 автор: bill   (07.02.2008 в 11:02)   письмо автору
 
   для: Trianon   (03.02.2008 в 21:42)
 

делаю запрос к базе SELECT (MAX(data) = curdate()) as up_to_date FROM informer3
в результате получаю "0" (НОЛЬ).

Дамп базы.
-- Table structure for informer3
-- ----------------------------
CREATE TABLE `informer3` (
`id` int(4) NOT NULL auto_increment,
`raion` varchar(11) character set utf8 default NULL,
`price` varchar(11) default NULL,
`data` date default NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=cp1251;

-- ----------------------------
-- Records
-- ----------------------------
INSERT INTO `informer3` VALUES ('45', 'Ворош', '1800', '2008-02-02');
INSERT INTO `informer3` VALUES ('46', 'Дзерж', '1850', '2008-02-02');
INSERT INTO `informer3` VALUES ('136', 'Центр', '1490', '2008-02-02');
INSERT INTO `informer3` VALUES ('151', 'Центр', '2713', '2008-02-02');
INSERT INTO `informer3` VALUES ('152', 'Дзерж', '2107', '2008-02-02');
INSERT INTO `informer3` VALUES ('153', 'Ворош', '2332', '2008-02-02');
INSERT INTO `informer3` VALUES ('154', 'КрОкт', '1863', '2008-02-02');


Что делаю не так?


P/S/ Вопрос снимаеться.. Разобрался..
НО возник другой:.......

   
 
 автор: bill   (04.02.2008 в 13:04)   письмо автору
 
   для: Trianon   (03.02.2008 в 21:42)
 

спасибо, ответ подробный (то что нужно!).
Сейчас немного времени нужно чтобы всё переварить, и наверняка новые вопросы будут. =)

   
 
 автор: Trianon   (03.02.2008 в 21:42)   письмо автору
 
   для: bill   (03.02.2008 в 18:17)
 

$sql = "SELECT (MAX(data) = curdate()) as up_to_date FROM informer3"

формируем в переменной $sql исходный SQL-код запроса.
Запрос вычисляет max(data) [т.е.максимальное значение поля data ] и сравнивает его со значением curdate() [т.е. функцией, которая возвращает дату текущего дня.] Запрос возвращает логическое значение (0 либо 1) в виде результата из одной строки (номер 0) с одним полем (по имени up_to_date )


if(!mysql_result(mysql_query($sql), 0, 'up_to_date'))
выполняем запрос, и тут же (полагая, что ошибок в запросе нет) берем ячейку из нулевой строки и поля up_to_date. Там будет 1 (если последняя дата - сегодняшняя) либо 0 (если дата не совпадает с сегодняшней) либо null (если строк вообще не было ни одной) либо false (если таки были ошибки в запросе).

Во всех случаях кроме 1 исполняется оператор добавления строки.

mysql_query("INSERT INTO informer3 (raion,price,data) VALUES ($raion, $price, curdate())");
> выполняем запись в базу по полям, в поле raion пишем переменную район $raion, в поле price переменную $price и тд.

здесь всё верно.

>И Ещё вот что странно при print_r () у меня в браузере выдаёт массив [raion] => ТЗР
[AVG(price)] => 1696.7925
>непойму почему, веть у меня Не т такого Поля в базе с именем [AVG(price)] , это параметры моему
>переменной... $rew=(int)$row['AVG(price)']; как онни в массив попали с помощью выше
>приведённого кода ума неприложу...

Здесь нужно смотреть, что вы присваивали переменной $row.

   
 
 автор: Evgen   (03.02.2008 в 21:01)   письмо автору
 
   для: bill   (03.02.2008 в 18:17)
 

>$sql = "SELECT (MAX(data) = curdate()) as up_to_date FROM informer3"; ----// скрипт берёт максимальное значение из поля ДАТА и придаёт ему формат вида 2008.02.03.

2008-02-03

>if(!mysql_result(mysql_query($sql), 0, 'up_to_date')) ----// (самое сложное) если запрос выполнен, тоесть $sql существует тооооо...... ничё непонятно......

Если функция mysql_result ничего не вернула, то...


> mysql_query("INSERT INTO informer3 (raion,price,data) ----// выполняем запись в базу по полям, в поле raion пишем переменную район $raion, в поле price переменную $price и тд.
> VALUES ($raion, $price, curdate())");

Да

>
>И Ещё вот что странно при print_r () у меня в браузере выдаёт массив [raion] => ТЗР
> [AVG(price)] => 1696.7925
>непойму почему, веть у меня Не т такого Поля в базе с именем [AVG(price)] , это параметры моему переменной... $rew=(int)$row['AVG(price)']; как онни в массив попали с помощью выше приведённого кода ума неприложу...
>

Что пытаетесь вывести с помощью print_r() ?

>Помогите......, внесите ясность Пожалусто....

   
 
 автор: bill   (03.02.2008 в 19:14)   письмо автору
 
   для: bill   (03.02.2008 в 18:17)
 

НЕУЖЕЛИ НИКТО НЕПОМОЖЕТ? 8**(

   

Сообщения:  [1-10]    [11-20]  [21-25] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

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