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

Форум MySQL

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

 

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

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

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

Уважаемые ГУРУ, бращаеться к ВАМ полное ничтожество в програмировании на PHP. Уже головой разбил необну стенку, решил некоторые задачи но вот с задачай о каторой сейчас пойдёт речь никак! =( ну совсем что-то никак! =(

Сейчас почти полностью сделал ИНФОРМЕР для сайта по Недвижимости.
Суть информера:
1.- выводить средние цены по разным видам объектов 1-комн.кв, 2-ком.кв и тд... , (это я Сделал!)
2.-выводить % роста цен на недвижимость так же по видам объектов... (тоже Сделал!)

3.- Записывать в базу средние цены из пункта №1 только в том случае если в базе СЕГОДНЯ (текущая дата) записи ещё нет. Мне это нужно чтобы в базе небыло ООООгромного кол-ва повторяющейся информации. ВОТ ТУТ Я ИСЪСЯК!! =( совсем совсем...
Кидаю кличь о помощи... HELP ME... Help....


Привожу куски кода
- определаю текущую дату:
$today=date("Y",time()) ."-".date("m",time()) ."-".date("d",time());

- выбираю максимальное значение Даты в базе:
$pr=mysql_query("SELECT DATE_FORMAT(data,'%Y-%m-%d') AS data FROM informer3 ORDER BY data DESC LIMIT 1 " );

- пытаюсь полученное занести в базу по условию занесения 1 раз в сутки:
if ($pr < $today) { $query4=mysql_query("INSERT INTO informer3 VALUES ( NULL,'$row[raion]', '$rew',now())");
}
else
{ }



Есть подозрение что проблемы из за несоответствие формата ДАТЫ в СКЛ таблице и в переменной $today. НО Мозга понять что ИМЕННО не так, нехватает. Помощи прошу... ХЭЛП...

   
 
 автор: Trianon   (02.02.2008 в 19:03)   письмо автору
 
   для: bill   (02.02.2008 в 18:50)
 

1. Печатайте промежуточные результаты при отладке скрипта. Иначе Вы не сможете разобраться, в чем у Вас ошибки.
К примеру $pr=mysql_query(...); if($pr < $today) - явная ошибка. Вы сравниваете дескриптор результата ответа, вместо того чтоб сравнивать сам ответ. Не напечатав $pr , Вы не увидите, что пропустили mysql_fetch_assoc()

2. Никогда не ставьте алиасы к столбикам так, чтобы они совпадали с именами полей. Запутаетесь сами, и других запутаете. SELECT DATE_FORMAT(data,'%Y-%m-%d') AS out_data

3. Нужно приводить дамп структуры таблицы и пример строк в ней. Иначе понять, есть ли в Вашем случае несоответствие формата, и требуется ли преобразование в SELECT как таковое (по-моему, оно там лишнее) невозможно.

   
 
 автор: bill   (02.02.2008 в 20:16)   письмо автору
 
   для: Trianon   (02.02.2008 в 19:03)
 

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

по пункту № 1 и №2 понял. (обдумаю, почитаю, исправлюсь)
по пункту № 3 если позволите завтра выложу своё творение тут на форуме и если Вас незутруднит вы ткнёте меня носим в мои недочёты.

Приношу свои извинения за ясно тупенькие вопросы и в целом уровень программирования. Надеюсь на понимание и посильное содействие.
Спасибо.

пс. отпишусь к 12-30 03 фев.

   
 
 автор: bill   (03.02.2008 в 11:54)   письмо автору
 
   для: Trianon   (02.02.2008 в 19:03)
 

1. немного почитал ночью, немного подумал.. НО недоконца понял насчёт:
-"Не напечатав $pr , Вы не увидите, что пропустили mysql_fetch_assoc()".

2. по поводу алиасов всё понял! Спасибо огромного!

3. дамп базы привожу, с кусочком инфы в ней:
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 ('1', 'Центр', '1500', '2008-02-01');
INSERT INTO `informer3` VALUES ('29', 'Центр', '2713', '2008-02-02');
INSERT INTO `informer3` VALUES ('30', 'Центр', '2713', '2008-02-03');
INSERT INTO `informer3` VALUES ('31', 'Центр', '2713', '2008-02-03');
INSERT INTO `informer3` VALUES ('32', 'Центр', '2713', '2008-02-03');

Если позволите приведу ещё и сам скрипт которой по идее всё и обрабатывает.. ТОлько вот с Занесением информации в базу по условию ! ОДИН РАЗ в СУТКИ ! у меня БОЛЬШИЕ проблемы!. Помогите если несложно, HELP//
(кусок скрипта)

$today=date("Y",time()) ."-".date("m",time()) ."-".date("d",time());
$pr= "SELECT DATE_FORMAT(data,'%Y-%m-%d') AS out_data FROM informer3 ORDER BY out_data DESC LIMIT 1 " ;
$rez=mysql_query($pr);
$query_rez = mysql_fetch_assoc($rez)
echo "<pre>";
print_r ($query_rez);
echo "</pre>";
//$wer=mysql_query("SELECT DATE_FORMAT(data,'%Y-%m-%d') FROM informer3 WHERE max(data) > NOW() - INTERVAL 1 DAY");


if ($pr) { $query4=mysql_query("INSERT INTO informer3 VALUES ( NULL,'$row[raion]', '$rew',now())");

}
else
{ }

if(mysql_query($query))
{
// Осуществляем перезагрузку страницы,
// чтобы сбросить POST-данные
echo "<HTML><HEAD>
<META HTTP-EQUIV='Refresh'; URL=$_SERVER[PHP_SELF]'>
</HEAD></HTML>";
} else exit("Ошибка при добавлении данных - ".mysql_error());

}
echo "<pre>";
print_r ($today) ;
echo "to dayZ</pre>";
echo "<pre>";
print_r ($query_rez);
echo "</pre>";
echo "<br>";


Спасибо.

   
 
 автор: Trianon   (03.02.2008 в 13:48)   письмо автору
 
   для: bill   (03.02.2008 в 11:54)
 

$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, $price, curdate())");

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

хммм... Это конечно Круто готовый код! =) спасибо.
сейчас буду "анализировать ЭТО"! =)

по поводу вывода и отладки я использую. PRINT_R. но иногда высвечиваеться в браузере Resource id #6. я так понял это говарит о то что запрос выполнен положительно но я вывожу на Принт дискриптор а не Переменную которой присвоен результат запроса.

Логика Правильная???

PS/ Trianon мой вечный Респект и Уважение!
Спасибо.

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

>по поводу вывода и отладки я использую. PRINT_R. но иногда высвечиваеться в браузере Resource id #6. я так понял это говарит о то что запрос выполнен положительно но я вывожу на Принт дискриптор а не Переменную которой присвоен результат запроса.
>
>Логика Правильная???

Абсолютно правильная.
к этому моменту результат запроса переменной Вы не присвоили.
Смотрите назначение функций mysql_num_rows(), mysql_fetch_assoc() и возможно mysql_result() .
Хотя без последней можно обойтись.

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

Супер! Исчерпывающий и полезный совет! Это мне сейчас и нужно!. Уже читаю.... Спасибо.

(с сайта неухожу, постоянно посты проверяю, =) )

   
 
 автор: bill   (03.02.2008 в 14:32)   письмо автору
 
   для: Trianon   (03.02.2008 в 13:48)
 

вставил код на место своего :

$today=date("Y",time()) ."-".date("m",time()) ."-".date("d",time());
$pr= "SELECT DATE_FORMAT(data,'%Y-%m-%d') AS out_data FROM informer3 ORDER BY out_data DESC LIMIT 1 " ;
$rez=mysql_query($pr);
$query_rez = mysql_fetch_assoc($rez)
echo "<pre>";
print_r ($query_rez);
echo "</pre>";
//$wer=mysql_query("SELECT DATE_FORMAT(data,'%Y-%m-%d') FROM informer3 WHERE max(data) > NOW() - INTERVAL 1 DAY");


if ($pr) { $query4=mysql_query("INSERT INTO informer3 VALUES ( NULL,'$row[raion]', '$rew',now())");

}
else
{ }

Пишет что "Ошибка в добавлении данных".

И если мне нужна информация из базы 30-ти дневной давности то мне 30 прописывать суда: ), 0, 'up_to_date')) ???????

Одним слово я в ШОКЕ от того что вижу. =) даже незнаю с чего и начать понимание увидинного. =)

   
 
 автор: Trianon   (03.02.2008 в 15:15)   письмо автору
 
   для: bill   (03.02.2008 в 14:32)
 

Я тоже в шоке от того, что вижу.

   
 
 автор: bill   (03.02.2008 в 15:20)   письмо автору
 
   для: Trianon   (03.02.2008 в 15:15)
 

=) Trianon Вы уж простите меня ламера недоучку. я понимаю что Вам со мной очень тяжко разговаривать. Но я рад что Вы меня понимаете и пытаетесь помочь.
Ещё раз извините.

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

предположу что я некорректно описал то как должен работать скрипт и пояэтому получил несовсем тот ответ.
Выладываю весь скрипт может это внесёт ясность:

$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) = 1";

$result2 = mysql_query($query2) or die(mysql_error());

// Print out result (Oбъединил два цыкла с помощью конструкции ЭНД. работает while($ro = mysql_fetch_array($result2) and $row = mysql_fetch_array($result)){ //
while($ro = mysql_fetch_array($result2) and $row = mysql_fetch_array($result)){

// заносим результат в базу
$rew=(int)$row['AVG(price)'];
$ris=(int)$ro['price'];

//условие внесения записи в базу. Если в базе есть запись за ТЕкущее число но новая запись незаписываеться.
//таким образом получаем 1 запись в 1 день.

$raznica = $rew - $ris;
$proc1 = $rew / 100;
$itog = $raznica / $proc1;
$itog = round($itog, 1);
// Print out result

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> ";

$today=date("Y",time()) ."-".date("m",time()) ."-".date("d",time());

$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, $price, curdate())");



if(mysql_query($result))
{
// Осуществляем перезагрузку страницы,
// чтобы сбросить POST-данные
echo "<HTML><HEAD>
<META HTTP-EQUIV='Refresh'; URL=$_SERVER[PHP_SELF]'>
</HEAD></HTML>";
} else exit("Ошибка при добавлении данных - ".mysql_error());

}
echo "<pre>";
print_r ($today) ;
echo "to dayZ</pre>";
echo "<pre>";
print_r ($sql);
echo "хз</pre>";
echo "<br>";

После его выполнения в браузере пишет -"Ошибка при добавлении данных" -неправельный синтаксис.... бла бла бла...

Уважаемые ГУГУ, неподскажите что умное, или тыкните носов где куда что и как почитать и сделать??? Очень нужно..
Спасибо.

   
 
 автор: bill   (03.02.2008 в 16:59)   письмо автору
 
   для: bill   (03.02.2008 в 15:18)
 

В голову пришла Идея.
А что если для упрощения разбить задачу выбоки из базы, показ Средней цены и %, и запись 1 раз в день этих средниц цен в базу НА ДВЕ ЧАСТИ.

Сделать ДВА скрипта.
1-й будет выбирать и отображать цены и %.
2-й будет выбирать и записывать в базу Один раз в день эти значения.


Возникает вопрос:
1. как сделать запись по времени (всё также актуален для меня). =(
2. как можно добиться какого эффекта когда ПОльзователь зайдя на страницу незаставляет скрипт каждый раз обращаться к базе и делать расчёт цен и %, а просто брал и подставлял готовый ХТМЛ документ (собственно сам информер размером 200*300) и ставил его в нужное место страницы.

Какими средствами это лучше реализовать??? Есть мысли???

   
 
 автор: bill   (03.02.2008 в 17:58)   письмо автору
 
   для: bill   (03.02.2008 в 16:59)
 

Человеки.. ХЭЛП... помогите мне всётаки это добро победить!
Дело в самом деле в

$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, $price, curdate())");

$db = mysql_fetch_assoc($result);
{

у меня после этого начал в браузере отображаться результат хоть....
НО непойму как теперь добиться запись в базу Средних цен по каждому району города . у меня пишет тольок по ОДНИМУ району. =*(

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

Парни поправте меня если я Неправ:
Правильно ли я понимаю лигику кучка кода.

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

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

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)']; как онни в массив попали с помощью выше приведённого кода ума неприложу...

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

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

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

   
 
 автор: 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() ?

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

   
 
 автор: 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.

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

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

   
 
 автор: 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   (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 в 15:12)   письмо автору
 
   для: bill   (07.02.2008 в 14:16)
 

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

Спасибо.

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

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

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

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

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


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

   
 
 автор: 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

   
Rambler's Top100
вверх

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