История изменений
Исправление KennyMinigun, (текущая версия) :
Как вариант. Но мне кажется, что будет слишком много запросов к базе.
Отчего же много запросов? Допустим есть БД:
CREATE TABLE `User` (
`id` meduimint(9) NOT NULL AUTO_INCREMENT,
`name` varchar(60) NOT NULL,
PRIMARY KEY (`id`)
);
CREATE TABLE `Record` (
`id` mediumint(9) NOT NULL AUTO_INCREMENT,
`text` varchar(60) DEFAULT '',
`user` mediumint(9) NOT NULL,
`parent` mediumint(9) DEFAULT NULL,
PRIMARY KEY (`id`),
FOREIGN KEY (`user`) REFERENCES `User` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY (`parent`) REFERENCES `Record` (`id`)
);
Всё что вам нужно: индекс по полю `Record`(`user`) и запрос вида:
SELECT * FROM `Record` WHERE `user` = :user;
Нужно же потом как-то собрать этот список в массив.
А это уже дело техники. Элементарная сортировка по полю `parent`.
Исправление KennyMinigun, :
Как вариант. Но мне кажется, что будет слишком много запросов к базе.
Отчего же много запросов? Допустим есть БД:
CREATE TABLE `User` (
`id` meduimint(9) NOT NULL AUTO_INCREMENT,
`name` varchar(60) NOT NULL,
PRIMARY KEY (`id`)
);
CREATE TABLE `Record` (
`id` mediumint(9) NOT NULL AUTO_INCREMENT,
`text` varchar(60) DEFAULT '',
`user` mediumint(9) NOT NULL,
`parent` mediumint(9) DEFAULT NULL,
PRIMARY KEY (`id`),
FOREIGN KEY (`user`) REFERENCES `User` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY (`parent`) REFERENCES `Record` (`id`)
);
Всё что вам нужно: индекс по полю `Record`(`user`) и запрос вида:
SELECT FROM `Record` WHERE `user` = :user;
Нужно же потом как-то собрать этот список в массив.
А это уже дело техники. Элементарная сортировка по полю `parent`.
Исходная версия KennyMinigun, :
Как вариант. Но мне кажется, что будет слишком много запросов к базе.
Отчего же много запросов? Допустим есть БД:
CREATE TABLE `User` (
`id` meduimint(9) NOT NULL AUTO_INCREMENT,
`name` varchar(60) NOT NULL,
PRIMARY KEY (`id`)
);
CREATE TABLE `Record` (
`id` mediumint(9) NOT NULL AUTO_INCREMENT,
`text` varchar(60) DEFAULT '',
`user` mediumint(9) NOT NULL,
`parent` mediumint(9) DEFAULT NULL,
PRIMARY KEY (`id`),
FOREIGN KEY (`user`) REFERENCES `User` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
FOREIGN KEY (`parent`) REFERENCES `Record` (`id`)
);
Всё что вам нужно: индекс по полю `Record`(`user`) и запрос вида:
SELECT FROM `Record` WHERE `user` = :user;
Нужно же потом как-то собрать этот список в массив.
А это уже дело техники. Элементарная сортировка по полю `parent`.