|
|
|
| Помогите разобраться с еще одним вопросом.
В БД имеется таблица, обзорно выглятит так:
+----------------------------------+
| fld_order | fld_text |
|----------------------------------|
| 1 ------- |
|----------------------------------|
| 2 ------- |
|----------------------------------|
| 3 ------- |
|----------------------------------|
| 4 ------- |
|----------------------------------|
| 5 ------- |
|----------------------------------|
| 6 ------- |
+----------------------------------+
|
Надо с помощью скрипта (или стандартными средствами MySQL, если это возможно), при вставке новой записи, для которой fld_order = 3, например, все записи, хранящиеся в таблице и имеющие fld_order < 3, не изменять, а для всех остальных fld_order инкрементировать (увеличить на единицу).
Как это сделать?
У меня был вариант с добавлением нового поля, который являлся Primary Key и имел Auto Increment, но он мне не очень понравился, хотя и работал...
Можно ли выполнить сие без дополнительного поля? Как-нибудь просто и гениально? | |
|
|
|
|
|
|
|
для: IceGhost
(05.01.2010 в 23:25)
| | Проблема успешно решена.
Оказывается, существует волшебное слово: LIMIT. | |
|
|
|
|
|
|
|
для: IceGhost
(06.01.2010 в 01:27)
| | И как же оно вам помогло? Можно увидеть код? Интересно посмотреть, как это реализовали вы. | |
|
|
|
|
|
|
|
для: 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);
?>
|
Жду ваших комментариев. | |
|
|
|
|
|
|
|
для: 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));
|
| |
|
|
|
|
|
|
|
для: Boeing
(06.01.2010 в 02:43)
| | Намек понял. А на счет остального что думаете? | |
|
|
|
|
|
|
|
для: IceGhost
(06.01.2010 в 02:45)
| |
UPDATE tbl_1
SET fld_order= fld_order + 1
WHERE fld_order > $end
|
| |
|
|
|
|
|
|
|
для: Trianon
(06.01.2010 в 02:48)
| | >= | |
|
|
|
|
|
|
|
для: Trianon
(06.01.2010 в 02:48)
| | Огромное спасибо Вурдалак'у и Trianon'у! А также всем участникам это темы!
P.S. Я так и думал, что все это может реализовать сама MySQL! | |
|
|
|
|
|
|
|
для: IceGhost
(06.01.2010 в 02:45)
| | Ну в той же стезе (ресурсопоглотительной) я думаю и о звёздочке=) Я бы перечислил явно все нужные мне поля, даже если бы использовал их все. | |
|
|
|
|
|
|
|
для: IceGhost
(06.01.2010 в 02:32)
| | UPDATE ... SET fid_order = fid_order + 1 ORDER BY fid_order DESC WHERE fid_order >= $fid_order | |
|
|
|