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

Форум MySQL

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

 

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

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

тема: Вставка в перёд удаления
 
 автор: kaoz   (23.06.2006 в 08:35)   письмо автору
 
 

пхп скрипт выглядит следующим образом:


<?php
...
if(!
mysql_query("DELETE FROM table WHERE Xdate=$date;")) echo mysql_error();
//Делаем INSERT ... по $date
...
?>


у меня такое ощущение, что скрипт не ждет когда произойдет удаление и начинает делать INSERT... и пока идет удаление те INSERT которые уже вставились удаляются вместе с ненужными данными...(ощущения основаны на сравнении affected rows до удаления и после, по логике скрипта их должно быть одинаково)..

как сделать так чтоб INSERT начинали писаться в базу ТОЛЬКО после удаления...

   
 
 автор: valenok   (23.06.2006 в 09:06)   письмо автору
 
   для: kaoz   (23.06.2006 в 08:35)
 

Для этого можно модифицировать ваш скрипт не очень сложным образом..
<?
... 
if(
mysql_query("DELETE FROM table WHERE Xdate=$date;")){
//Делаем INSERT ... по $date 
...}
else{echo 
mysql_error();}
?>


Надеюсь понятно..

   
 
 автор: valenok   (23.06.2006 в 09:08)   письмо автору
 
   для: kaoz   (23.06.2006 в 08:35)
 

Я бы порекомендовал сделать следующее:
<?
... 
mysql_query("DELETE FROM table WHERE Xdate='".$date."'",$link) OR die(mysql_error());
//Делаем INSERT ... по $date 
... 
?>


И вокруг названия таблицы (table) и названия поля Xdate стоило бы поставиь обратные апострофы.
Тоесть то что при английской раскладке находитс ятам где буква Ё.

   
 
 автор: kaoz   (23.06.2006 в 10:17)   письмо автору
 
   для: valenok   (23.06.2006 в 09:08)
 

по синтаксису учту замечания...

по сути дела, Вы предлагаете тоже самое что я написал только чуть в другой форме.

Подается запрос на DELETE и не дожидаясь завершения начинаются INSERT.

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

мож я где-то не прав, но результат выполнения моего скрипта наводит на такой вывод...

   
 
 автор: valenok   (23.06.2006 в 10:18)   письмо автору
 
   для: kaoz   (23.06.2006 в 10:17)
 

Ну не правильный вывод.
Мой код не работает?

   
 
 автор: valenok   (23.06.2006 в 10:21)   письмо автору
 
   для: kaoz   (23.06.2006 в 10:17)
 

Сам себе по синтаксису будешь делать замечания когда у тебя всё работать будет.
А пока:
mysql_query("DELETE FROM table WHERE Xdate=$date;")
Выполняется в любом случае поэтому, а вот правильный ли он и не возвращает ли он ошибки..

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

   
 
 автор: valenok   (23.06.2006 в 10:22)   письмо автору
 
   для: valenok   (23.06.2006 в 10:21)
 

Ваш код и смотрите что выходит:

<?php 
... 
mysql_query("DELETE FROM table WHERE Xdate=$date;");
echo 
mysql_error(); 
//Делаем INSERT ... по $date 
... 
?>

   
 
 автор: kaoz   (23.06.2006 в 11:13)   письмо автору
 
   для: valenok   (23.06.2006 в 10:22)
 

вы неправильно поняли что мне нужно

такой запрос выполняется без ошибок всегда и echo mysql_error() впринципе не нужен... а если вдруг там ошибка закралась то это решается просто die(mysql_error())....

вопрос заключается в том как сделать так чтобы скрипт продолжал выполняться только после завершения удаления огромного кол-ва данных(соответственно такой запрос в моем случае выполняется за 20-30 секунд).

сейчас скрипт посылает запрос на удаление и не дожидаясь когда все удалиться начинает посылать запросы на запись в базу

   
 
 автор: valenok   (23.06.2006 в 11:21)   письмо автору
 
   для: kaoz   (23.06.2006 в 11:13)
 

Очень уже это странно..
Можно кусок кода побольше..

   
 
 автор: cheops   (23.06.2006 в 11:29)   письмо автору
 
   для: kaoz   (23.06.2006 в 08:35)
 

affected rows - это устанавливается только для изменяющих операций вроде DELETE, UPDATE и INSERT - если такой операции не было, то он не устаналвивается, какой оператор предшествует DELETE? У вас не вставляются данные или ещё что-то происходит? Что не нравится?

   
 
 автор: kaoz   (23.06.2006 в 11:45)   письмо автору
 
   для: cheops   (23.06.2006 в 11:29)
 

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

алгоритм скрипта:
1.удаляем все записи за этот день
2.читаем файл и пишем в базу

проверяю следующим образом:

1. запускаю скрипт в первый раз (в базе за этот день ничего нет и DELETE выполняется мгновенно). в результате кол-во строк в таблице к примеру 1000000000.
2. запускаю скрипт во второй раз (DELETE выполняется за 20-30 секунд). в результате строк в таблице меньше например 999999000. (должно быть 1000000000)

вывод: во время выполнения DELETE выполняются INSERTы и соответственно удаляются пока DELETE не закончит выполняться.

   
 
 автор: kaoz   (24.06.2006 в 15:11)   письмо автору
 
   для: kaoz   (23.06.2006 в 11:45)
 

???

   
 
 автор: valenok   (24.06.2006 в 15:21)   письмо автору
 
   для: kaoz   (24.06.2006 в 15:11)
 

Ты хочешь чтоб они исполнялись паралельно?
Вряд ли так можно..

   
 
 автор: kaoz   (25.06.2006 в 17:41)   письмо автору
 
   для: valenok   (24.06.2006 в 15:21)
 

читай выше...
выходит что параллельно можно, а надо последовательно :)

   
 
 автор: valenok   (25.06.2006 в 17:48)   письмо автору
 
   для: kaoz   (25.06.2006 в 17:41)
 

Выходит что у тебя чтото странное творится...

   
 
 автор: cheops   (24.06.2006 в 16:08)   письмо автору
 
   для: kaoz   (23.06.2006 в 11:45)
 

А INSERT у вас какой? С задержкой или без? Приведите его, если не сложно?

   
 
 автор: kaoz   (25.06.2006 в 17:40)   письмо автору
 
   для: cheops   (24.06.2006 в 16:08)
 

INSERT INTO table VALUES (1,2,3,4,5,6,7,8,....,N)

   
 
 автор: kaoz   (29.06.2006 в 22:17)   письмо автору
 
   для: kaoz   (25.06.2006 в 17:40)
 

мож я туплю?

   
Rambler's Top100
вверх

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