powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Работа с вложенными категориями.
14 сообщений из 14, страница 1 из 1
Работа с вложенными категориями.
    #39130140
manking
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день. Есть такой код.

Код: sql
1.
2.
3.
4.
5.
CREATE TABLE category (
    id integer not null primary key,
    parent_category_id integer references category(id),
    name varchar(100) not null
);


Написать запрос на выборку всех категорий, имеющих не более трёх подкатегорий следующего уровня (без глубины).

В какую сторону копать? Это вложенный запрос select потом из него вынимать данные или как делать?
...
Рейтинг: 0 / 0
Работа с вложенными категориями.
    #39130203
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В сторону HAVING COUNT() < 4
...
Рейтинг: 0 / 0
Работа с вложенными категориями.
    #39130213
manking
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinaВ сторону HAVING COUNT() < 4

Код: sql
1.
2.
3.
4.
5.
SELECT
 * ,  count(*) as J 
FROM `category`
WHERE `parent_category_id`=4
HAVING J > 3



...
Рейтинг: 0 / 0
Работа с вложенными категориями.
    #39130215
manking
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ошибся отправил.
Вот зная родительский id могу получить его детей.
Но как передать все родительские id в этот запрос? Чтобы он нашел все id у которых детей больше 3?
...
Рейтинг: 0 / 0
Работа с вложенными категориями.
    #39130247
manking
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Смотрю пример отсюда.
http://www.mysql.ru/docs/gruber/mg11.html

Код: sql
1.
2.
3.
4.
5.
6.
SELECT *                                      |
               | FROM  Customers outer                         |
               | WHERE 10/03/1990 IN                           |
               | (SELECT odate                                 |
               | FROM Orders inner                             |
               | WHERE outer.cnum = inner.cnum);  




Примерно так же написал но он пишет об ошибке
Как указать внешнюю строку кандидат outer для того чтобы она была передана во внутренний подзапрос?
Код: sql
1.
2.
3.
4.
5.
6.
SELECT * FROM `category` outer

WHERE `id` IN
(SELECT `id` 
FROM `category` inner2 
WHERE outer.`id` = inner2.`parent_category_id`)



#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'outer WHERE `id` IN (SELECT `id` FROM `category` inner2 WHERE outer.`id` = in' at line 1
...
Рейтинг: 0 / 0
Работа с вложенными категориями.
    #39130272
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mankingзная родительский id могу получить его детей.
Получить можешь, а посчитать - нет? Нет, ты серьёзно?
...
Рейтинг: 0 / 0
Работа с вложенными категориями.
    #39130297
manking
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akinamankingзная родительский id могу получить его детей.
Получить можешь, а посчитать - нет? Нет, ты серьёзно?
Что серьезно?
Как мне перебрать все строки и id каждой передать во вложенный запрос?
Вот пример по ссылке у меня не работает, выскакивает ошибка, а должен класть текущую строку-кандидат в outer(псевданим внешнего запроса), для того чтобы она потом во внутреннем запросе использовалась.
Код: sql
1.
SELECT * FROM `category` outer
...
Рейтинг: 0 / 0
Работа с вложенными категориями.
    #39130387
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mankingКак мне перебрать все строки и id каждой передать во вложенный запрос?Какой ещё вложенный запрос? В постановке задачи
mankingзапрос на выборку всех категорий, имеющих не более трёх подкатегорий следующего уровня (без глубины) (и в её решении) ничего подобного не было. Задача изменилась? Озвучьте новый вариант. Полностью.
...
Рейтинг: 0 / 0
Работа с вложенными категориями.
    #39130401
manking
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tanglir,
Сейчас я пытаюсь понять почему не работает код из примера(СООТНЕСЕННЫЕ ПОДЗАПРОСЫ) отсюда
http://www.mysql.ru/docs/gruber/mg11.html

Написал аналогичный:
Код: sql
1.
2.
3.
4.
5.
SELECT * FROM `category` outer
WHERE `id` IN
(SELECT `id` 
FROM `category` inner2 
WHERE outer.`id` = inner2.`parent_category_id`)



В моем понимании должно происходить следующее(как в статье):
1) Выбрать строку из таблицы `category` и поместить в текущую строку-кандидат outer.
2) Выполнить подзапрос(внутренний) где идет проверка ид этой строки кандидата outer.`id` = inner2.`parent_category_id`.
3) Определить будет ли эта строка кандидат попадать в результирующий запрос после проверки того что вернул подзапрос и конструкции WHERE.
4) Выбрать новую строку кандидат и проверять её снова.

Вместо этот phpmyadmin пишет об ошибке:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'outer WHERE `id` IN (SELECT `id` FROM `category` inner2 WHERE outer.`id` = in' at line 1
...
Рейтинг: 0 / 0
Работа с вложенными категориями.
    #39130413
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
manking,

вам даже форумная подсветка синтаксиса на ошибку намекает :)
"outer" - зарезервированное слово, используйте что-то другое или обрамляйте его бэктиками
...
Рейтинг: 0 / 0
Работа с вложенными категориями.
    #39130445
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mankingВ моем понимании должно происходить следующее
Когда ты вытащишь все данные из таблицы сервера в переменные программы - оно может выглядеть так. А на сервере оно выглядит совершенно иначе. Приблизительно так:
Код: sql
1.
2.
3.
4.
SELECT parent_category_id
FROM category 
GROUP BY parent_category_id
HAVING COUNT(id) < 4


А если нужны все данные по этой категории, то привлекаем ещё одну копию таблицы:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
SELECT t1.*
FROM category t1,
(
  SELECT parent_category_id
  FROM category 
  GROUP BY parent_category_id
  HAVING COUNT(id) < 4
) t2
WHERE t1.parent_category_id = t2.parent_category_id
...
Рейтинг: 0 / 0
Работа с вложенными категориями.
    #39130446
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Правда, последний запрос преднамеренно неверный - он не выведет категории, не имеющие потомков. Это тебе в качестве развлечения- заменить декартово произведение на стороннее связывание.
...
Рейтинг: 0 / 0
Работа с вложенными категориями.
    #39130447
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
или выведет? чёта лень думать...
...
Рейтинг: 0 / 0
Работа с вложенными категориями.
    #39130627
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina,

не выведет, т.к. таких категорий в поле parent_category не будет.
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Работа с вложенными категориями.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]