|
|
|
| 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-ой день мучаюсь. | |
|
|
|
|
|
|
|
для: pal4ik
(10.04.2008 в 13:12)
| | какой формат столбца data_time? | |
|
|
|
|
|
|
|
для: ronin80
(10.04.2008 в 13:30)
| | Y-M-D H-M-S
вобщем полный | |
|
|
|
|
|
|
|
для: pal4ik
(10.04.2008 в 13:32)
| | $date%
и что означает это % ? зачем он? | |
|
|
|
|
|
|
|
для: 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:38)
| | % означает игнорировать остальные символы | |
|
|
|
|
|
|
|
для: ronin80
(10.04.2008 в 13:38)
| | не совсем понимаю о чем ты, но спасибо все равно. уже разобрались | |
|
|
|
|
|
|
|
для: pal4ik
(10.04.2008 в 13:12)
| | ORDER BY id DESC limit 1
используется в выборке SELECT а не в UPDATE,
поэтому и запрос на обновление и не срабатывает | |
|
|
|
|
|
|
|
для: AcidTrash
(10.04.2008 в 13:39)
| | т.е.
ORDER BY id DESC limit 1
можно удалить и ничего ни на что не повлияет? | |
|
|
|
|
|
|
|
для: 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 | |
|
|
|
|
|
|
|
для: AcidTrash
(10.04.2008 в 13:46)
| | не ругается | |
|
|
|
|
|
|
|
для: AcidTrash
(10.04.2008 в 13:46)
| | у брал этот ORDER и мне перезаписало все данные для компаний. только одни и те же данные записало всем компаниям | |
|
|
|
|
|
|
|
для: pal4ik
(10.04.2008 в 13:57)
| | Так условие то надо ставить не только по дате, но и по компании
UPDATE fran_ADR SET prise='$prise' WHERE data_time LIKE '$date%' AND company='$company' | |
|
|
|
|
|
|
|
для: 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:06)
| | 1 | |
|
|
|
|
|
|
|
для: pal4ik
(10.04.2008 в 14:06)
| | я просто не совсем пойму как указывать конкретный столбец? | |
|
|
|
|
|
|
|
для: pal4ik
(10.04.2008 в 14:22)
| | Так я не понял у Вас две таблицы или одна? | |
|
|
|
|
|
|
|
для: AcidTrash
(10.04.2008 в 14:27)
| | таблицы 2 как видно.
Это существенно?
нужна дата из второй | |
|
|
|
|
|
|
|
для: 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];
и тд
}
|
| |
|
|
|
|
|
|
|
для: AcidTrash
(10.04.2008 в 14:37)
| | $kolvo_pre=mysql_fetch_row($new)
Выводит предпоследние данные компании
$kolvo_pos=mysql_fetch_row($new) - последние данные. | |
|
|
|
|
|
|
|
для: pal4ik
(10.04.2008 в 14:40)
| | $kolvo_pre и $kolvo_pos это массивы.
Вывод интересующих данных из него, я привел выше | |
|
|
|
|
|
|
|
для: AcidTrash
(10.04.2008 в 14:43)
| | ага! спасибо за помощь! я как не подумал, что это массив. переделывать все я не стал, просто на вывод дал команду не как другие массивы:
print kolvo_pre
а
$kolvo_pos[3]
где 3 - номер столбца с датой. ух. спасибо за помощь! | |
|
|
|
|
|
|
|
для: pal4ik
(10.04.2008 в 14:53)
| | Кстати по теме, советую посмотреть
mysql_fetch_assoc();
mysql_fetch_array();
mysql_fetch_object();
mysql_result();
|
| |
|
|
|