Forum Webscript.Ru

Общие => Базы данных => Тема начата: Trinux от 09 Июня 2004, 06:52:40

Название: MySQL сортировка по данным из других таблиц
Отправлено: Trinux от 09 Июня 2004, 06:52:40
Есть 3 таблицы. Каталоги, подкаталоги, программы.

cat:
id
name

pod_cat:
id
cat_id
name

program:
id
pod_id
name

Примерно так. Т.е. в таблице прог не указан каталог, в которм находится прога, только подкаталог.
Каталоги резделены брейком (
) на главной. Хотелось бы чтобы каталог, в котором больше всего прог был наверху итд. Т.е. сортировались по убыванию. Но вот проблема.... Как сосчитать количество программ в каталоге, учитывая что в каждом каталоге не один подкаталог. Т.е. даже не так. Можно ли обойтись только MySQL запросом, минуя php код или нет?
Название: MySQL сортировка по данным из других таблиц
Отправлено: commander от 09 Июня 2004, 10:32:42
изначально не правильно составленны таблицы катологов и документов... советую сделать примерно так:
CREATE TABLE folder
(
  folder_id serial,
  parent_folder_id int4,
  name varchar(300),
  CONSTRAINT folder_pk PRIMARY KEY (folder_id),
  CONSTRAINT folder_parent_folder_id FOREIGN KEY (parent_folder_id) REFERENCES folder(id) ON UPDATE NO ACTION ON DELETE NO ACTION

);

CREATE TABLE document
(
  document_id serial,
  folder_id int4,
  name varchar(300),
  CONSTRAINT document_pk PRIMARY KEY (document_id)
);
Название: MySQL сортировка по данным из других таблиц
Отправлено: commander от 09 Июня 2004, 10:34:53
верхний родительский каталог вставляешь ручками.. остальный подкаталоги можно приложением... система имеет неограниченную степень вложения каталогов и документов...
Название: MySQL сортировка по данным из других таблиц
Отправлено: Макс от 09 Июня 2004, 16:23:54
commander
[off] человек же ясно написал, что у него mysql а ты опять про постгрес пишешь. Потом будешь объяснять ему, что такое serial и почему он не работает в его любимой СУБД [/off]
Название: MySQL сортировка по данным из других таблиц
Отправлено: commander от 09 Июня 2004, 16:26:40
Макс
виноват...
serial = int not null auto_increment
Название: MySQL сортировка по данным из других таблиц
Отправлено: Trinux от 10 Июня 2004, 02:28:14
Ну скажем так... БД уже написана и уже содержит порядкак 2000-3000 записей. Менять все я не стану, дабы не потерять клиентов. Насчет твоего способа. Да. Я понял идею, признаю он куда лучше, спасибо. Но проблема остается.
Название: MySQL сортировка по данным из других таблиц
Отправлено: commander от 10 Июня 2004, 09:37:40
Trinux
Не очень понял в чем проблемма перевода? проблемма решаеться минут на 15... 2000-3000 записей это копейки... И как при этом можно потерять клиентов?
Зато потом не будет никаких проблемм с сортировкой...

Просто твой способ никуда не годиться... Рано или поздно ты это поймешь и всё равно будешь переводить систему...
Так что чем раньше ты это сделаешь тем лучше... :)
Название: MySQL сортировка по данным из других таблиц
Отправлено: Zotoff от 10 Июня 2004, 16:36:58
Я понял. но в данном проекте мне не нужно куча подкаталогов. Мне нужно только каталог, подкаталог и прога. Хорошо. Допустим я перешел на твою структуру (вообще мне оч нравится. В други проэктах так и сделаю). Как составить запрос, чтобы каталоги распологались по убыванию прог в них, учитывая все подкаталоги???
Название: MySQL сортировка по данным из других таблиц
Отправлено: Zotoff от 12 Июня 2004, 12:18:02
SELECT cat.name, count(program.id) as proga FROM cat, pod_cat, Program WHERE cat.id=pod_cat.cat_id AND pod_cat.id=program.pod_id GROUP BY program.id ORDER BY proga DESC

Вроде должно так получится, но пока не пробовал.