LINUX.ORG.RU

История изменений

Исправление 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`.