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

Форум MySQL

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

 

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

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

тема: IF + Update + INSERT
 
 автор: pal4ik   (10.04.2008 в 13:12)   письмо автору
 
 

function db_f($prise,$company)
{
$date=date('Y-m-d');
$prov="SELECT * FROM fran_ADR where data_time LIKE '$date%' && company='$company'";
$prov=mysql_query($prov);
if(mysql_num_rows($prov)>0)
{
$create="UPDATE fran_ADR SET prise='$prise' WHERE data_time LIKE '$date%' ORDER BY id DESC limit 1";
mysql_query($create);
}else{
$create="INSERT INTO fran_ADR (prise,company) VALUES ('$prise','$company')";
mysql_query($create);
}
}


По идее, код должен добавлять даные про компанию в табл, если таких данных за сегодняшнее число еще не было. А если сегодня такие данные уже вносились, то НЕ добавить, а ПЕРЕЗАПИСАТЬ сегодняшние данные.

Но работает он так:

Добавляет, при заданном условии (выше), но если такие данне уже сегодня добавлялись, то должен перезаписать, но почему-то НЕ перезаписывает. (((

Подскажите пожалуйста, как исправить код и в чем дело? 2-ой день мучаюсь.

   
 
 автор: ronin80   (10.04.2008 в 13:30)   письмо автору
 
   для: pal4ik   (10.04.2008 в 13:12)
 

какой формат столбца data_time?

   
 
 автор: pal4ik   (10.04.2008 в 13:32)   письмо автору
 
   для: ronin80   (10.04.2008 в 13:30)
 

Y-M-D H-M-S

вобщем полный

   
 
 автор: pal4ik   (10.04.2008 в 13:36)   письмо автору
 
   для: pal4ik   (10.04.2008 в 13:32)
 

$date%

и что означает это % ? зачем он?

   
 
 автор: ronin80   (10.04.2008 в 13:38)   письмо автору
 
   для: pal4ik   (10.04.2008 в 13:32)
 

$prov="SELECT * FROM fran_ADR where data_time LIKE '$date%' && company='$company'";

здесь надо писать не LIKE, а приводить столбец к сокращённому формату и сравнивать с переменной, примерно так:

where date(data_time)='$date'

   
 
 автор: ronin80   (10.04.2008 в 13:39)   письмо автору
 
   для: ronin80   (10.04.2008 в 13:38)
 

% означает игнорировать остальные символы

   
 
 автор: pal4ik   (10.04.2008 в 14:12)   письмо автору
 
   для: ronin80   (10.04.2008 в 13:38)
 

не совсем понимаю о чем ты, но спасибо все равно. уже разобрались

   
 
 автор: AcidTrash   (10.04.2008 в 13:39)   письмо автору
 
   для: pal4ik   (10.04.2008 в 13:12)
 

ORDER BY id DESC limit 1
используется в выборке SELECT а не в UPDATE,
поэтому и запрос на обновление и не срабатывает

   
 
 автор: pal4ik   (10.04.2008 в 13:42)   письмо автору
 
   для: AcidTrash   (10.04.2008 в 13:39)
 

т.е.
ORDER BY id DESC limit 1

можно удалить и ничего ни на что не повлияет?

   
 
 автор: AcidTrash   (10.04.2008 в 13:46)   письмо автору
 
   для: pal4ik   (10.04.2008 в 13:42)
 

Да не можно, а нужно! чтобы запрос сработал
Еще раз подчеркиваю ORDER BY это сортировка применима к команде SELECT
попробуйте изменить строчки на
$create="UPDATE fran_ADR SET prise='$prise' WHERE data_time LIKE '$date%' ORDER BY id DESC limit 1";
if(!mysql_query($create)){
echo mysql_error();
}
и увидите на что будет ругаться MYSQL

   
 
 автор: pal4ik   (10.04.2008 в 13:52)   письмо автору
 
   для: AcidTrash   (10.04.2008 в 13:46)
 

не ругается

   
 
 автор: pal4ik   (10.04.2008 в 13:57)   письмо автору
 
   для: AcidTrash   (10.04.2008 в 13:46)
 

у брал этот ORDER и мне перезаписало все данные для компаний. только одни и те же данные записало всем компаниям

   
 
 автор: AcidTrash   (10.04.2008 в 14:19)   письмо автору
 
   для: pal4ik   (10.04.2008 в 13:57)
 

Так условие то надо ставить не только по дате, но и по компании
UPDATE fran_ADR SET prise='$prise' WHERE data_time LIKE '$date%' AND company='$company'

   
 
 автор: pal4ik   (10.04.2008 в 14:06)   письмо автору
 
   для: AcidTrash   (10.04.2008 в 13:46)
 

Добавил вместо ORDER:

&& company='$company'

и все заработало! спасибо за помощь!


Но правда есть еще вопрос:

for($i=0;$i<count($company);$i++)
{
$new=mysql_query("SELECT * FROM kolvo_ADR where company='$company[$i]' order by id desc limit 0,1");
$kolvo=mysql_fetch_row($new);
########
$new=mysql_query("SELECT * FROM fran_ADR where company='$company[$i]' order by id desc limit 0,1");
$kolvo_pos=mysql_fetch_row($new);
########
$new=mysql_query("SELECT * FROM fran_ADR where company='$company[$i]' order by id desc limit 1,1");
$kolvo_pre=mysql_fetch_row($new);


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


табл вида:
id
prise
company
data_time

   
 
 автор: pal4ik   (10.04.2008 в 14:20)   письмо автору
 
   для: pal4ik   (10.04.2008 в 14:06)
 

1

   
 
 автор: pal4ik   (10.04.2008 в 14:22)   письмо автору
 
   для: pal4ik   (10.04.2008 в 14:06)
 

я просто не совсем пойму как указывать конкретный столбец?

   
 
 автор: AcidTrash   (10.04.2008 в 14:27)   письмо автору
 
   для: pal4ik   (10.04.2008 в 14:22)
 

Так я не понял у Вас две таблицы или одна?

   
 
 автор: pal4ik   (10.04.2008 в 14:28)   письмо автору
 
   для: AcidTrash   (10.04.2008 в 14:27)
 

таблицы 2 как видно.

Это существенно?

нужна дата из второй

   
 
 автор: AcidTrash   (10.04.2008 в 14:37)   письмо автору
 
   для: pal4ik   (10.04.2008 в 14:28)
 

Интересно а что у Вас выводит скажем $kolvo_pre=mysql_fetch_row($new) ?
Вывод данных должен выглядить как то так. Вы же выбираете то все поля


<?
$new
=mysql_query("SELECT * FROM fran_ADR where company='$company[$i]' order by id desc limit 1,1");
while(
$row=mysql_fetch_array($new)){
print 
$row[date_time];
print 
$row[prise];
и тд
}

   
 
 автор: pal4ik   (10.04.2008 в 14:40)   письмо автору
 
   для: AcidTrash   (10.04.2008 в 14:37)
 

$kolvo_pre=mysql_fetch_row($new)

Выводит предпоследние данные компании


$kolvo_pos=mysql_fetch_row($new) - последние данные.

   
 
 автор: AcidTrash   (10.04.2008 в 14:43)   письмо автору
 
   для: pal4ik   (10.04.2008 в 14:40)
 

$kolvo_pre и $kolvo_pos это массивы.
Вывод интересующих данных из него, я привел выше

   
 
 автор: pal4ik   (10.04.2008 в 14:53)   письмо автору
 
   для: AcidTrash   (10.04.2008 в 14:43)
 

ага! спасибо за помощь! я как не подумал, что это массив. переделывать все я не стал, просто на вывод дал команду не как другие массивы:

print kolvo_pre

а

$kolvo_pos[3]

где 3 - номер столбца с датой. ух. спасибо за помощь!

   
 
 автор: AcidTrash   (10.04.2008 в 15:11)   письмо автору
 
   для: pal4ik   (10.04.2008 в 14:53)
 

Кстати по теме, советую посмотреть
mysql_fetch_assoc();
mysql_fetch_array();
mysql_fetch_object();
mysql_result();

   
Rambler's Top100
вверх

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