Автор Тема: MySQL сортировка по данным из других таблиц  (Прочитано 4537 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Trinux

  • Завсегдатай
  • Новичок
  • *
  • Сообщений: 37
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.tpcorp.net.ru
Есть 3 таблицы. Каталоги, подкаталоги, программы.

cat:
id
name

pod_cat:
id
cat_id
name

program:
id
pod_id
name

Примерно так. Т.е. в таблице прог не указан каталог, в которм находится прога, только подкаталог.
Каталоги резделены брейком (
) на главной. Хотелось бы чтобы каталог, в котором больше всего прог был наверху итд. Т.е. сортировались по убыванию. Но вот проблема.... Как сосчитать количество программ в каталоге, учитывая что в каждом каталоге не один подкаталог. Т.е. даже не так. Можно ли обойтись только MySQL запросом, минуя php код или нет?

Оффлайн commander

  • Developer
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1298
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.webtips.ru
MySQL сортировка по данным из других таблиц
« Ответ #1 : 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)
);
And no religion too...

Оффлайн commander

  • Developer
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1298
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.webtips.ru
MySQL сортировка по данным из других таблиц
« Ответ #2 : 09 Июня 2004, 10:34:53 »
верхний родительский каталог вставляешь ручками.. остальный подкаталоги можно приложением... система имеет неограниченную степень вложения каталогов и документов...
And no religion too...

Оффлайн Макс

  • vir magni ingenii
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3534
  • +0/-0
  • 2
    • Просмотр профиля
MySQL сортировка по данным из других таблиц
« Ответ #3 : 09 Июня 2004, 16:23:54 »
commander
[off] человек же ясно написал, что у него mysql а ты опять про постгрес пишешь. Потом будешь объяснять ему, что такое serial и почему он не работает в его любимой СУБД [/off]
First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack. ( George Carrette )

Оффлайн commander

  • Developer
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1298
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.webtips.ru
MySQL сортировка по данным из других таблиц
« Ответ #4 : 09 Июня 2004, 16:26:40 »
Макс
виноват...
serial = int not null auto_increment
And no religion too...

Оффлайн Trinux

  • Завсегдатай
  • Новичок
  • *
  • Сообщений: 37
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.tpcorp.net.ru
MySQL сортировка по данным из других таблиц
« Ответ #5 : 10 Июня 2004, 02:28:14 »
Ну скажем так... БД уже написана и уже содержит порядкак 2000-3000 записей. Менять все я не стану, дабы не потерять клиентов. Насчет твоего способа. Да. Я понял идею, признаю он куда лучше, спасибо. Но проблема остается.

Оффлайн commander

  • Developer
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1298
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.webtips.ru
MySQL сортировка по данным из других таблиц
« Ответ #6 : 10 Июня 2004, 09:37:40 »
Trinux
Не очень понял в чем проблемма перевода? проблемма решаеться минут на 15... 2000-3000 записей это копейки... И как при этом можно потерять клиентов?
Зато потом не будет никаких проблемм с сортировкой...

Просто твой способ никуда не годиться... Рано или поздно ты это поймешь и всё равно будешь переводить систему...
Так что чем раньше ты это сделаешь тем лучше... :)
And no religion too...

Оффлайн Zotoff

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 16
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
MySQL сортировка по данным из других таблиц
« Ответ #7 : 10 Июня 2004, 16:36:58 »
Я понял. но в данном проекте мне не нужно куча подкаталогов. Мне нужно только каталог, подкаталог и прога. Хорошо. Допустим я перешел на твою структуру (вообще мне оч нравится. В други проэктах так и сделаю). Как составить запрос, чтобы каталоги распологались по убыванию прог в них, учитывая все подкаталоги???

Оффлайн Zotoff

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 16
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
MySQL сортировка по данным из других таблиц
« Ответ #8 : 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

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

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28