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

Форум MySQL

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

 

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

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

тема: Как занести данные равные первичному ключу
 
 автор: LO   (23.03.2006 в 16:22)   письмо автору
 
 

Вот структура таблицы:

CREATE TABLE 'table_code' (
 'id' int(11) unsigned NOT NULL auto_increment,
  'code' char(33) NOT NULL default '',
  PRIMARY KEY  ('id'),
  UNIQUE KEY 'code' ('code')
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=1 ;

Я хочу, чтобы в поле code хранился зашифрованный id этой же строки. Но для этого нужно узнать сначала максимальное значение id потом уже заполнять таблицу.
А можно ли это как-то сделать одним запросом?

   
 
 автор: Loki   (23.03.2006 в 16:27)   письмо автору
 
   для: LO   (23.03.2006 в 16:22)
 

А вот так нельзя?

UPDATE table_code SET code=MD5(id)

   
 
 автор: LO   (23.03.2006 в 16:36)   письмо автору
 
   для: Loki   (23.03.2006 в 16:27)
 

Ну, мне нужно было не update, а insert, но работает. Спасибки. Я как-то и не додумалась до такого.

   
 
 автор: LO   (23.03.2006 в 16:54)   письмо автору
 
   для: LO   (23.03.2006 в 16:36)
 

Я наверно поспешила с выводами. При таком запросе действительно заполняютя поля и шифруется значение, но id непойму какое берется. Оно все время равно одному и тому же числу, а мне нужно чтоб шифровалось именно то id, которое и стоит в этой строке, т.е оно всегда должно быть уникальным(в строке с id=7 в поле code должно стоять значене равное md5(7) )

   
 
 автор: kasmanaft   (23.03.2006 в 16:59)   письмо автору
 
   для: LO   (23.03.2006 в 16:54)
 

если id - autoincrement - то можно сначала занести данные в базу, а потом закодировать id...
а можно узнать максимальный id вот так "select max(id) from table"...

счас перечитал вопрос и еще кое-что понял :)) можно сделать наверно так:
UPDATE table_code SET code=MD5(id) WHERE id=(переменная с нужным id)

   
 
 автор: LO   (23.03.2006 в 17:20)   письмо автору
 
   для: kasmanaft   (23.03.2006 в 16:59)
 

>счас перечитал вопрос и еще кое-что понял :)) можно сделать
>наверно так:
>UPDATE table_code SET code=MD5(id) WHERE id=(переменная с
>нужным id)

Вот, в том то и проблема, как узнать эту переменную с нужным id и мне нужно не обновлять данные, а просто их заполнять

   
 
 автор: Trianon   (23.03.2006 в 17:26)   письмо автору
 
   для: LO   (23.03.2006 в 17:20)
 

А может оставлять в этом столбце NULL, а при селекте выбирать значение с помощью COALESCE?

   
 
 автор: Trianon   (23.03.2006 в 16:59)   письмо автору
 
   для: LO   (23.03.2006 в 16:54)
 

Выражение expression может относится к любому столбцу, который ранее был внесен в список значений. Например, можно указать следующее:

mysql> INSERT INTO tbl_name (col1,col2) VALUES(15,col1*2);

Но нельзя указать:

mysql> INSERT INTO tbl_name (col1,col2) VALUES(col2*2,15);

Из мануала.

   
 
 автор: LO   (23.03.2006 в 17:12)   письмо автору
 
   для: Trianon   (23.03.2006 в 16:59)
 

А какое я значение укажу для id, если ставить NULL, то в code будет зашифрована цифра 0 (или 1)
INSERT INTO table_code (id,code) VALUES (NULL,id*2);

   
 
 автор: kasmanaft   (23.03.2006 в 17:18)   письмо автору
 
   для: LO   (23.03.2006 в 17:12)
 

нулл это вообще ничего :) нулл это нулл...

   
 
 автор: Trianon   (23.03.2006 в 17:19)   письмо автору
 
   для: LO   (23.03.2006 в 17:12)
 

Да... похоже, с auto_increment это не катит. :(

   
 
 автор: Loki   (23.03.2006 в 17:31)   письмо автору
 
   для: LO   (23.03.2006 в 17:12)
 

ну тогда придется двумя запросами:
первым добавляем строку, затем, с помощью mysql_insert_id() определяем шв этой строки и выполняем update, по предложенной выше схеме.

   
 
 автор: LO   (23.03.2006 в 17:34)   письмо автору
 
   для: Loki   (23.03.2006 в 17:31)
 

В чем отличия mysql_insert_id() и last_inser_id() ?
last_inser_id() - MySQL
mysql_insert_id() - PHP

   
 
 автор: Trianon   (23.03.2006 в 17:36)   письмо автору
 
   для: LO   (23.03.2006 в 17:34)
 

Второе является обложкой для первого

   
 
 автор: Loki   (23.03.2006 в 17:37)   письмо автору
 
   для: LO   (23.03.2006 в 17:34)
 

можно еще попробовать вот так:
но не уверен что сработает

INSERT (id, code) VALUES(NULL, LAST_INSERT_ID()*2)

но судя по мануалу, это значение обновляется уже после запроса.

   
 
 автор: Trianon   (23.03.2006 в 17:39)   письмо автору
 
   для: Loki   (23.03.2006 в 17:37)
 

Это не будет работать для многострочных insert-ов.
Но один UPDATE, поправляющий несколько вставленных строк, придумать можно.

   
 
 автор: Loki   (23.03.2006 в 17:42)   письмо автору
 
   для: Trianon   (23.03.2006 в 17:39)
 

Я его во втором посте привел. По-моему, вполне рабочий.

   
 
 автор: Trianon   (23.03.2006 в 17:46)   письмо автору
 
   для: Loki   (23.03.2006 в 17:42)
 

Этак Вы все code перепашете, а не только только что вставленные.

   
 
 автор: kasmanaft   (23.03.2006 в 18:25)   письмо автору
 
   для: Trianon   (23.03.2006 в 17:46)
 

-

   
 
 автор: Loki   (23.03.2006 в 18:49)   письмо автору
 
   для: Trianon   (23.03.2006 в 17:46)
 

ну да... или можно задать все больше определенного id

   
 
 автор: Trianon   (23.03.2006 в 20:27)   письмо автору
 
   для: Loki   (23.03.2006 в 18:49)
 

А точнее - UPDATE table_code SET code = md5(id) WHERE id >= LAST_INSERT_ID() AND code IS NULL

   
Rambler's Top100
вверх

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