|
|
|
| Люди, такой вопрос.. Есть таблица пользователей включающая поля ID, Nickname и так далее, все что нужно для пользователя. и есть таблица коментов. которая имеет поля ID, PersonID(id пользователя добавившего комент) и поле Nickname( это имя пользователя добавившего комент)- оно внесено для удобства, чтоб не подключаться еще раз к базе данных пользователей для вывода комента.
Теперь допустим что пользователь меняет свой ник... как сделать чтоб в таблице коментов ник тоже изменился??? Понятно что можно тупо подключиться к базе данных и в цикле заменить Х на У , но а если таких таблиц не одна, всмысле не только таблица коментов, а еще какие нибудь функции пользователя, это сколько же надо циклов сколько тон бессполезного кода.. Короче вопрос, КАК?))) Заранее спасибо.. базу данных лепил через MyPHPAdmin . заранее спасибо!!! | |
|
|
|
|
|
|
|
для: UnlikeAO
(09.09.2008 в 14:52)
| | А Вы говорите для удобства... :)
В таблицу комментариев только id пользователя и изменения ника пройдут незаметно для других таблиц | |
|
|
|
|
|
|
|
для: UnlikeAO
(09.09.2008 в 14:52)
| | почитайте про "ON UPDATE CASCADE" | |
|
|
|
|
|
|
|
для: UnlikeAO
(09.09.2008 в 14:52)
| | >оно внесено для удобства, чтоб не подключаться еще раз к базе данных пользователей для вывода комента.
у Вас пользователи и коменты размещены в разных БД?
to Root: on update cascade? в MySQL? для поля которое не является ссылкой на первичный ключ? | |
|
|
|
|
|
|
|
для: Trianon
(09.09.2008 в 15:13)
| | >to Root: on update cascade?
да
>в MySQL?
да
> для поля которое не является ссылкой на первичный ключ?
если поле, например, UNIQUE и есть FK, почему нет? | |
|
|
|
|
|
|
|
для: Root
(09.09.2008 в 15:29)
| | Спрошу проще.
У Вас такое получалось? | |
|
|
|
|
|
|
|
для: Trianon
(09.09.2008 в 19:02)
| | >Спрошу проще.
>У Вас такое получалось?
да :-)
CREATE TABLE `users` (
`id` int(10) unsigned NOT NULL auto_increment,
`name` varchar(45) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
CREATE TABLE `comments` (
`id` int(10) unsigned NOT NULL auto_increment,
`info` varchar(45) NOT NULL,
`username` varchar(45) NOT NULL,
PRIMARY KEY (`id`),
#UNIQUE KEY `username` (`username`),
KEY `username` USING BTREE (`username`),
CONSTRAINT `FK_username` FOREIGN KEY (`username`) REFERENCES `users` (`name`) ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
insert into users values
(null, 'first'),
(null, 'second'),
(null, 'third');
insert into comments values
(null, 'comment 1', 'first'),
(null, 'comment 2', 'first'),
(null, 'comment 3', 'second'),
(null, 'comment 4', 'third');
select * from users;
select * from comments;
update users set name = 'root' where id = 1;
select * from users;
select * from comments;
|
UPD.
без UNIQUE в comments. | |
|
|
|
|
|
|
|
для: Trianon
(09.09.2008 в 15:13)
| | в одной базе данных, но в разных таблицах... | |
|
|
|
|
|
|
|
для: UnlikeAO
(10.09.2008 в 00:39)
| | тогда не надо насчет "не подключаться же к базе за никами"
Это не удобство, а форменная денормализация. Ничем не оправданная. | |
|
|
|
|
|
|
|
для: Trianon
(10.09.2008 в 00:48)
| | ок, перестрою бд.. Спасибо! | |
|
|
|
|
|
|
|
для: Trianon
(10.09.2008 в 00:48)
| | ок, перестрою бд.. Спасибо! | |
|
|
|