Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.09.2014, 17:51   #1
vga72
 
Аватар для vga72
 
Регистрация: 18.09.2014
Сообщений: 3
Лампочка Запрос к одной и той же таблице БД

Нужно собрать некоторые данные из одной и той же таблицы myfotogallery_categories в БД myfotogallery.
Таблица имеет такие поля cat_id, cat_name, cat_parent_id, …
Как это сделать правильно, быстро и просто?
Я немного пробовал что то сделать с помощью подзапросов (SQL subquery), но к сожалению, должного результата не получил. Сложность для меня в том, что данные в 1-й таблице.

Мой вариант из нескольких запросов, который работает выглядит так:

Код:
CREATE TABLE cat_name_for_sub_cats (`cat_parent_id` INT(10) UNSIGNED NOT NULL DEFAULT '0')
 ENGINE = MEMORY SELECT DISTINCT cat_parent_id FROM myfotogallery.myfotogallery_categories
 WHERE cat_parent_id != 0 group by cat_parent_id;
 
SELECT cat_id, cat_name 
FROM myfotogallery.myfotogallery_categories a, cat_name_for_sub_cats b
WHERE a.cat_id=b.cat_parent_id;
 
DROP TABLE IF EXISTS cat_name_for_sub_cats;

Последний раз редактировалось Stilet; 18.09.2014 в 22:30.
vga72 вне форума Ответить с цитированием
Старый 18.09.2014, 18:45   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Древовидная таблица? Какая глубина вложенности? И, насколько понял, MySQL? Ага, кроме MySQL других СУБД не существует )
Да, и что вообще нужно в результате получить?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 18.09.2014 в 18:48.
Аватар вне форума Ответить с цитированием
Старый 18.09.2014, 18:55   #3
vga72
 
Аватар для vga72
 
Регистрация: 18.09.2014
Сообщений: 3
По умолчанию

Да, древовидная.
Предполагается наличие пока 1 уровня потомков, т.е. глубина небольшая.

Нужно получить id и имена (SELECT cat_id, cat_name, см. ниже) всех родителей (у них cat_parent_id == 0) для имеющихся в таблице потомков (cat_parent_id != 0) .

Все это используется в web проекте (Apache+PHP+MySQL).

Последний раз редактировалось Stilet; 18.09.2014 в 22:30.
vga72 вне форума Ответить с цитированием
Старый 18.09.2014, 19:21   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Ну и что за беда? Так примерно. Хочешь join вместо WHERE, без разницы

Код:
SELECT C1.id,C1.cat_parent_id,C2.cat_id, C2.cat_name,
  FROM myfotogallery_categories C1,myfotogallery_categories C2
  WHERE C1.cat_parent_id<>0 AND C1.cat_parent_id=C2.id
Для неопределенной глубины вложенности так не пойдет, да и вообще MySQL не приспособлен для иерархических запросов
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 18.09.2014 в 19:23.
Аватар вне форума Ответить с цитированием
Старый 23.09.2014, 00:05   #5
vga72
 
Аватар для vga72
 
Регистрация: 18.09.2014
Сообщений: 3
По умолчанию

Спасибо Вам.
Вот я подправил и вышло так:

Код:
SELECT C1.cat_parent_id as cat_id, C2.cat_name 
 FROM myfotogallery_categories C1, myfotogallery_categories C2
 WHERE C1.cat_parent_id!=0 AND C1.cat_parent_id=C2.cat_id group by cat_id

Последний раз редактировалось Stilet; 23.09.2014 в 08:07.
vga72 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удалить часть массива в пределах одной и той же переменной Человек_Борща PHP 0 04.05.2014 16:06
Макрос на создание одной и той же сводной Hoochara Microsoft Office Excel 14 03.08.2011 14:26
Подсчитать слова, которые начинаются и заканчиваются одной и той же буквой Galya_B Помощь студентам 0 23.05.2011 20:01
Запись на лист Excel одной и той же опции ListBox два раза подряд Mishel825 Microsoft Office Excel 7 01.11.2009 14:08
Как запустить несколько копий одной и той же программы? murcot Помощь студентам 4 20.02.2009 11:28