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

Форум MySQL

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

 

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

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

тема: добавление новой записи и увеличение поля значения поля на единицу
 
 автор: вопрос_MYSQL   (14.10.2004 в 23:35)
 
 

Есть таблица с несколькими полями одно из них auto_increment
а как делается так чтобы при добавлении/изменении новой записи ее значение увеличивалось на 1(это не поле auto_increment а другое) и можно ли чтобы отсчет был не с 0 а скажем с любого числа?

Конкретно вот поля:
id_page auto_increment
name
rubrika
id_rubrika
n_rubrika


Таблица заполнена
но в ней изменяются rubrika и при изменении нужно чтоб значение поля n_rubrika увеличивалось на еденицу, т.е. изменили первую запись (поле rubrika ) значение поля n_rubrika стало 1 , изменили другую запись (поле rubrika ) значение поля n_rubrika стало 2 и т.д.

   
 
 автор: cheops   (14.10.2004 в 23:43)   письмо автору
 
   для: вопрос_MYSQL   (14.10.2004 в 23:35)
 

Хм... а поле rubrika изменяется оператором UPDATE? Если так, то увеличивать значение n_rubrika можно таким образом:
UPDATE table SET rubrika='new text ...', n_rubrika = n_rubrika + 1
WHERE id_page = 4;

   
 
 автор: вопрос_MYSQL   (14.10.2004 в 23:54)
 
   для: cheops   (14.10.2004 в 23:43)
 

точно!
Спасибо все оч. просто оказывается.

   
 
 автор: вопрос_MYSQL   (14.10.2004 в 23:59)
 
   для: вопрос_MYSQL   (14.10.2004 в 23:54)
 

что то не совсем получилось при изменение второй записи значение n_rubrika становиться также 1

   
 
 автор: cheops   (15.10.2004 в 00:10)   письмо автору
 
   для: вопрос_MYSQL   (14.10.2004 в 23:59)
 

Хм... создал таблицу аналогичную вашей - у меня работает...

PS Если вы копируете запрос из браузера - следите чтобы id_page принимал реальные значения, если у вас не будет записи с id_page = 4 изменений не произойдёт.

   
 
 автор: вопрос_MYSQL   (15.10.2004 в 00:03)
 
   для: cheops   (14.10.2004 в 23:43)
 

А при изменении этой же записи значение увеличивается на единицу.
А нужно чтоб у каждой записи значение n_rubrika было уникикально 1 2 3 4 5 ...

а что больше нельзя редактировать свои сообщения???

   
 
 автор: cheops   (15.10.2004 в 00:11)   письмо автору
 
   для: вопрос_MYSQL   (15.10.2004 в 00:03)
 

Погодите-ка я чего-то немного запутался :))) Нужно чтобы значение n_rubrika было просто уникально или чтобы оно увеличивалось на единицу при каждом исправлении записи?

   
 
 автор: вопрос_MYSQL   (15.10.2004 в 00:16)
 
   для: cheops   (15.10.2004 в 00:11)
 

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

   
 
 автор: cheops   (15.10.2004 в 00:43)   письмо автору
 
   для: вопрос_MYSQL   (15.10.2004 в 00:16)
 

>увеличивалось на единицу для записи которую
>узменили потом
Так уникальность не сохранится... так как после добавляя записи
45
46
47
и изменяя изменяя запись 46 получим две записи с номером 47. Увеличение на единицу это требование того, чтобы изменённая запись была дургой? Тогда порядок действий должен быть следующим.
1) Уничтожить поле n_rubrika.
2) Нужно снять атрибут auto_increment с id_page.
3) Создать поле n_rubrika с атрибутом auto_increment - так мы получим уникальные значения для уже существующих записей.
4) Вернуть атрибут auto_increment для поля id_page
5) При создании новой записи присваивать n_rubrika значение равное максимальному значению n_rubrika + 1
INSERT INTO table VALUES(0,'$name', '$rubrika', $id_rubrika, MAX(n_rubrika)+1)

6) При изменении записи, не просто увеличивать на единицу поле n_rubrika, а увеличивать максимальное значение для этого столбца
UPDATE table SET rubrika='new text ...', n_rubrika = MAX(n_rubrika) + 1 
WHERE id_page = 4;

   
 
 автор: вопрос_MYSQL   (15.10.2004 в 01:06)   письмо автору
 
   для: cheops   (15.10.2004 в 00:43)
 

А может лучше тогда
1 Определить максимальное значение поля n_rubrika
и изменяемой записи присвоить значение поля n_rubrika максимальное значение поля n_rubrika +1

   
 
 автор: cheops   (15.10.2004 в 01:11)   письмо автору
 
   для: вопрос_MYSQL   (15.10.2004 в 01:06)
 

Ну... если n_rubrika априори уникально, то можно и так.

   
 
 автор: вопрос_MYSQL   (15.10.2004 в 01:27)   письмо автору
 
   для: cheops   (15.10.2004 в 01:11)
 


UPDATE table SET rubrika='new text ...', n_rubrika = MAX(n_rubrika) + 1 
WHERE id_page = 4; 

что то не срабатывает этот код
n_rubrika = MAX(n_rubrika) + 1 это значит что значение записи поля n_rubrika будет увеличено на максимальное значение которое есть в поле n_rubrika на единицу ?

   
 
 автор: cheops   (15.10.2004 в 01:38)   письмо автору
 
   для: вопрос_MYSQL   (15.10.2004 в 01:27)
 

Хм... да помню какая-то закавыка была... тогда придётся использовать два запроса - сначала узнавать максимальное значение, увеличивать на единицу, а потом подставлять полученное значение во второй запрос.

   
 
 автор: вопрос_MYSQL   (15.10.2004 в 01:52)   письмо автору
 
   для: cheops   (15.10.2004 в 01:38)
 

  
$sql = mysql_query("SELECT MAX( n_rubrika ) AS n_rubrika
         FROM pages ;");

$spisok = mysql_query("
UPDATE pages SET rubrika='".$rubrika."', id_rubrika='12', n_rubrika = '".$sql."'+1  WHERE name='".$URL."'
;" );

что то этот код не работает
этот запрос:
SELECT MAX( n_rubrika ) AS n_rubrika
FROM pages
находит максимальное значение n_rubrika но почему то это значение не переходит переменной $sql
деалаю echo $sql ;
выводит
.Resource id #12.

   
 
 автор: Адоп Акробат   (15.10.2004 в 03:32)   письмо автору
 
   для: вопрос_MYSQL   (15.10.2004 в 01:52)
 

Мне кажеца вам нужно зделать вот так

$sql = "SELECT MAX( n_rubrika ) AS n_rubrika 
         FROM pages"; 

$spisok = mysql_query(" 
UPDATE pages SET rubrika='".$rubrika."', id_rubrika='12', n_rubrika = '".$sql."'+1  WHERE name='".$URL."' " ); 


А у вас ошибка то что вы в конце каждого запроса ставети точку с запятой
mysql_query("SELECT MAX( n_rubrika ) AS n_rubrika 
         FROM pages ;"); 

а нада
mysql_query("SELECT MAX( n_rubrika ) AS n_rubrika 
         FROM pages"); 

Потому что когда пишете код в ПХП то он кагбы автоматически закрывает запрос

   
 
 автор: cheops   (15.10.2004 в 09:30)   письмо автору
 
   для: вопрос_MYSQL   (15.10.2004 в 01:52)
 

$sql - это дескриптор результата, с помощью его следует получить результат, например при помощи функции mysql_result():
<?php
$sql 
mysql_query("SELECT MAX( n_rubrika ) AS n_rubrika 
         FROM pages ;"
); 
$num mysql_result($sql0);
$num++;
$spisok mysql_query(
UPDATE pages SET rubrika='"
.$rubrika."', id_rubrika='12', n_rubrika = '".$num."  WHERE name='".$URL."' 
;" 
); ?>


http://www.softtime.ru/dic/id_dic=127&id_group=2

   
 
 автор: вопрос_MYSQL   (15.10.2004 в 15:57)   письмо автору
 
   для: cheops   (15.10.2004 в 09:30)
 

так все заработало а вот есть вопрос
Генерирование последовательность без атрибута auto_increment а спомощью функции LAST_INSERT_ID() c аргументом (в MYSQL c версии 3,22,9)
пример :
UPDATE name_table SET ident = LAST_INSERT_ID (ident +1);
SELECT LAST_INSERT_ID() ;

функцию LAST_INSERT_ID() в моем примере можно применить?

   
 
 автор: cheops   (15.10.2004 в 19:21)   письмо автору
 
   для: вопрос_MYSQL   (15.10.2004 в 15:57)
 

Хм... можно поробовать, я если честно не пробовал этой функцией пользоваться, так как часто прибегаю к многострочной вставке, когда она не применима.

   
 
 автор: glsv (Дизайнер)   (15.10.2004 в 00:43)   письмо автору
 
   для: вопрос_MYSQL   (15.10.2004 в 00:03)
 

>а что больше нельзя редактировать свои сообщения???
Редактирование свои сообщений доступно зарегистрированным пользователям.

   
Rambler's Top100
вверх

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