|
|
|
| Вот структура таблицы:
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 потом уже заполнять таблицу.
А можно ли это как-то сделать одним запросом? | |
|
|
|
|
|
|
|
для: LO
(23.03.2006 в 16:22)
| | А вот так нельзя?
UPDATE table_code SET code=MD5(id)
|
| |
|
|
|
|
|
|
|
для: Loki
(23.03.2006 в 16:27)
| | Ну, мне нужно было не update, а insert, но работает. Спасибки. Я как-то и не додумалась до такого. | |
|
|
|
|
|
|
|
для: LO
(23.03.2006 в 16:36)
| | Я наверно поспешила с выводами. При таком запросе действительно заполняютя поля и шифруется значение, но id непойму какое берется. Оно все время равно одному и тому же числу, а мне нужно чтоб шифровалось именно то id, которое и стоит в этой строке, т.е оно всегда должно быть уникальным(в строке с id=7 в поле code должно стоять значене равное md5(7) ) | |
|
|
|
|
|
|
|
для: 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) | |
|
|
|
|
|
|
|
для: kasmanaft
(23.03.2006 в 16:59)
| | >счас перечитал вопрос и еще кое-что понял :)) можно сделать
>наверно так:
>UPDATE table_code SET code=MD5(id) WHERE id=(переменная с
>нужным id)
Вот, в том то и проблема, как узнать эту переменную с нужным id и мне нужно не обновлять данные, а просто их заполнять | |
|
|
|
|
|
|
|
для: LO
(23.03.2006 в 17:20)
| | А может оставлять в этом столбце NULL, а при селекте выбирать значение с помощью COALESCE? | |
|
|
|
|
|
|
|
для: 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);
Из мануала. | |
|
|
|
|
|
|
|
для: Trianon
(23.03.2006 в 16:59)
| | А какое я значение укажу для id, если ставить NULL, то в code будет зашифрована цифра 0 (или 1)
INSERT INTO table_code (id,code) VALUES (NULL,id*2);
|
| |
|
|
|
|
|
|
|
для: LO
(23.03.2006 в 17:12)
| | нулл это вообще ничего :) нулл это нулл... | |
|
|
|
|
|
|
|
для: LO
(23.03.2006 в 17:12)
| | Да... похоже, с auto_increment это не катит. :( | |
|
|
|
|
|
|
|
для: LO
(23.03.2006 в 17:12)
| | ну тогда придется двумя запросами:
первым добавляем строку, затем, с помощью mysql_insert_id() определяем шв этой строки и выполняем update, по предложенной выше схеме. | |
|
|
|
|
|
|
|
для: Loki
(23.03.2006 в 17:31)
| | В чем отличия mysql_insert_id() и last_inser_id() ?
last_inser_id() - MySQL
mysql_insert_id() - PHP | |
|
|
|
|
|
|
|
для: LO
(23.03.2006 в 17:34)
| | Второе является обложкой для первого | |
|
|
|
|
|
|
|
для: LO
(23.03.2006 в 17:34)
| | можно еще попробовать вот так:
но не уверен что сработает
INSERT (id, code) VALUES(NULL, LAST_INSERT_ID()*2)
|
но судя по мануалу, это значение обновляется уже после запроса. | |
|
|
|
|
|
|
|
для: Loki
(23.03.2006 в 17:37)
| | Это не будет работать для многострочных insert-ов.
Но один UPDATE, поправляющий несколько вставленных строк, придумать можно. | |
|
|
|
|
|
|
|
для: Trianon
(23.03.2006 в 17:39)
| | Я его во втором посте привел. По-моему, вполне рабочий. | |
|
|
|
|
|
|
|
для: Loki
(23.03.2006 в 17:42)
| | Этак Вы все code перепашете, а не только только что вставленные. | |
|
|
|
|
|
|
|
для: Trianon
(23.03.2006 в 17:46)
| | - | |
|
|
|
|
|
|
|
для: Trianon
(23.03.2006 в 17:46)
| | ну да... или можно задать все больше определенного id | |
|
|
|
|
|
|
|
для: Loki
(23.03.2006 в 18:49)
| | А точнее - UPDATE table_code SET code = md5(id) WHERE id >= LAST_INSERT_ID() AND code IS NULL | |
|
|
|