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

Форум MySQL

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

 

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

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

тема: обновление записей в БД
 
 автор: IceGhost   (05.01.2010 в 23:25)   письмо автору
 
 

Помогите разобраться с еще одним вопросом.
В БД имеется таблица, обзорно выглятит так:

+----------------------------------+
|   fld_order    |    fld_text     |
|----------------------------------|
|          1           -------     |
|----------------------------------|
|          2           -------     |
|----------------------------------|
|          3           -------     |
|----------------------------------|
|          4           -------     |
|----------------------------------|
|          5           -------     |
|----------------------------------|
|          6           -------     |
+----------------------------------+

Надо с помощью скрипта (или стандартными средствами MySQL, если это возможно), при вставке новой записи, для которой fld_order = 3, например, все записи, хранящиеся в таблице и имеющие fld_order < 3, не изменять, а для всех остальных fld_order инкрементировать (увеличить на единицу).

Как это сделать?
У меня был вариант с добавлением нового поля, который являлся Primary Key и имел Auto Increment, но он мне не очень понравился, хотя и работал...

Можно ли выполнить сие без дополнительного поля? Как-нибудь просто и гениально?

  Ответить  
 
 автор: IceGhost   (06.01.2010 в 01:27)   письмо автору
 
   для: IceGhost   (05.01.2010 в 23:25)
 

Проблема успешно решена.
Оказывается, существует волшебное слово: LIMIT.

  Ответить  
 
 автор: neadekvat   (06.01.2010 в 01:31)   письмо автору
 
   для: IceGhost   (06.01.2010 в 01:27)
 

И как же оно вам помогло? Можно увидеть код? Интересно посмотреть, как это реализовали вы.

  Ответить  
 
 автор: IceGhost   (06.01.2010 в 02:32)   письмо автору
 
   для: neadekvat   (06.01.2010 в 01:31)
 

Короче, я снова подумал над кодом. Все удачно обошлось и без LIMIT. :)
<?php
  mysql_connect
("localhost""user""");
  
mysql_select_db("1");
  
  
$end 4// Какой записью заканчивать инкрементирование?
  
  
$rc mysql_query("SELECT * FROM tbl_1");
  
$num_rows mysql_num_rows($rc);
  
  for (
$i $num_rows$i >= $end$i--)
  {
    
$sql "UPDATE tbl_1 SET fld_order='" . ++$i "' WHERE fld_order='" . --$i "'";
    
mysql_query($sql);
  }
  
$sql "INSERT INTO tbl_1 VALUES ('" $end "', '-------')";
  
mysql_query($sql);
?>

Жду ваших комментариев.

  Ответить  
 
 автор: Boeing   (06.01.2010 в 02:43)   письмо автору
 
   для: IceGhost   (06.01.2010 в 02:32)
 

$rc = mysql_query("SELECT * FROM tbl_1"); 
  $num_rows = mysql_num_rows($rc); 


Эту строку я бы сделал проще и как мне кажется нересурсотребовательней, ведь Вам не нужны поля таблы как таковые, вам нужно лишь знать сколько в табле полей.

$ num_rows = mysql_result(mysql_query("select count(*) from catalog"),0));

  Ответить  
 
 автор: IceGhost   (06.01.2010 в 02:45)   письмо автору
 
   для: Boeing   (06.01.2010 в 02:43)
 

Намек понял. А на счет остального что думаете?

  Ответить  
 
 автор: Trianon   (06.01.2010 в 02:48)   письмо автору
 
   для: IceGhost   (06.01.2010 в 02:45)
 

UPDATE tbl_1
    SET fld_order= fld_order + 1 
  WHERE fld_order >  $end 

  Ответить  
 
 автор: Вурдалак   (06.01.2010 в 02:51)   письмо автору
 
   для: Trianon   (06.01.2010 в 02:48)
 

>=

  Ответить  
 
 автор: IceGhost   (06.01.2010 в 02:59)   письмо автору
 
   для: Trianon   (06.01.2010 в 02:48)
 

Огромное спасибо Вурдалак'у и Trianon'у! А также всем участникам это темы!
P.S. Я так и думал, что все это может реализовать сама MySQL!

  Ответить  
 
 автор: Boeing   (06.01.2010 в 02:55)   письмо автору
 
   для: IceGhost   (06.01.2010 в 02:45)
 

Ну в той же стезе (ресурсопоглотительной) я думаю и о звёздочке=) Я бы перечислил явно все нужные мне поля, даже если бы использовал их все.

  Ответить  
 
 автор: Вурдалак   (06.01.2010 в 02:46)   письмо автору
 
   для: IceGhost   (06.01.2010 в 02:32)
 

UPDATE ... SET fid_order = fid_order + 1 ORDER BY fid_order DESC WHERE fid_order >= $fid_order

  Ответить  
Rambler's Top100
вверх

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