19.09.2019, 17:19 [+3 UTC]
в нашей команде: 3 831 чел. | участники онлайн: 6 (рекорд: 21)

:: РЕГИСТРАЦИЯ

задать вопрос

все разделы

правила

новости

участники

доска почёта

форум

блоги

поиск

статистика

наш журнал

наши встречи

наша галерея

отзывы о нас

поддержка

руководство

Версия системы:
7.77 (31.05.2019)
JS-v.1.34 | CSS-v.3.35

Общие новости:
28.04.2019, 09:13

Форум:
12.09.2019, 08:17

Последний вопрос:
19.09.2019, 14:47
Всего: 150343

Последний ответ:
19.09.2019, 15:43
Всего: 259029

Последняя рассылка:
19.09.2019, 16:45

Писем в очереди:
0

Мы в соцсетях:

Наша кнопка:

RFpro.ru - здесь вам помогут!

Отзывы о нас:
16.09.2009, 22:22 »
Sergey66
...Спасибо за оперативность! [вопрос № 172211, ответ № 254230]
28.05.2013, 10:15 »
Александр Сергеевич
Спасибо!!! [вопрос № 187377, ответ № 272314]

РАЗДЕЛ • Базы данных

Установка и настройка серверов баз данных, таблицы и запросы.

[администратор рассылки: Коцюрбенко Алексей Владимирович (Модератор)]

Лучшие эксперты в этом разделе

solowey
Статус: Бакалавр
Рейтинг: 314
Коцюрбенко Алексей Владимирович
Статус: Модератор
Рейтинг: 68
Megaloman
Статус: Советник
Рейтинг: 35

Перейти к консультации №:
 

Консультация онлайн # 70944
Раздел: • Базы данных
Автор вопроса: Golden Spider
Отправлена: 14.01.2007, 21:47
Поступило ответов: 2

Здраствуйте уважаемые эксперты!

Вот такой вопрос:
В базе есть таблица cats такого типа:
id (auto_inscrement) title parent

В не содержаться названия категорий и их подкатегории причём категории имеют parent=0, а подкатегории parent="id основной категории".

Ести ещё одна таблица test:
id(a_i) title cats

В поле cats содержаться id номера подкатегорий в таком виде +id1++id2++id3+...

Т.е. для получения количества записей из второй таблицы, ссылающихся на какую либо подкатегоорию из первой я делал такоз запрос:

1) SELECT count(id) FROM test WHERE cats LIKE "%+'.$id.'+%", где $id-номер подкатегории из первой :)
Итак собственно вопрос!

Моя задача получить кол-во (а потом и извлечь) ОСНОВНЫХ категорий у которых хотя-бы на одну подкатегорию ссылается хоть-бы одна запись из второй таблицы ( см 1. ).

Как сделать такое условие отбора?

Состояние: Консультация закрыта

Ответ # 136532 от dianacode

доброе время суток, Golden Spider

ужас как сложно... ) а мануалы по проектированию в реляционных субд вам не попадались ? ;)

или это особенность программного кода, который работает с этой структурой ?

так или иначе - попробуйте вариант с перепроектированием модели, ну, к примеру, добавьте дополнительную вспомогательную таблицу, вообщем решение походит на вот это:

create table cats(
id int unsigned not null auto_increment,
parent int unsigned not null default 0,
title varchar(50)
);

create table test(
id int unsigned not null auto_increment,
title varchar(50)
);

create table cats_test(
cats_test_id int unsigned not null auto_increment,
test_id int not null,
cats_id int not null
);

далее, если нам нужно добавить ассоциацию группы котов )) к какой-либо записи из test, делаем так:
insert into cats_test_id values(0, 1, 1);
потом ещё кот
insert into cats_test_id values(0, 1, 2);
а потом ещё стадо котов )))
insert into cats_test_id values(0, 1, 3);
insert into cats_test_id values(0, 1, 4);
insert into cats_test_id values(0, 1, 5);

и так сколько угодно котов можно ассоциировать с записью в таблице test

ну и селект по такой таблице делать - одно удовольствие -
select count(*) from cats_test where test_id=258;

так вы посчитаете количество котов, которые должны быть ассоциированы с первой записью таблицы test ^_^

с уважением, удачи


Консультировал: dianacode
Дата отправки: 14.01.2007, 23:39

Рейтинг ответа:

0

[подробно]

Сообщение
модераторам

Отправлять сообщения
модераторам могут
только участники портала.
ВОЙТИ НА ПОРТАЛ »
регистрация »

Здравствуйте, Golden Spider!
Уважаемая dianacode несомненно права: создавать такие структуры это извините попахивает особо тяжкими извращениями.
Но все-таки составить такой запрос можно, хоть это и страшно:
Select ct.* from cats ct, tests tst, (select count() as cnt from tests t, cats с where t.cats LIKE "%+'.$c.id.'+%" and c.id in (select id from cats c1 where c1.parent=ct.id)) incl where ct.parent=0 and incl.cnt>0
Под рукой нет никакого sql executor'а - проверить на ситаксис не получиться


Консультировал: Tek
Дата отправки: 15.01.2007, 10:28

Рейтинг ответа:

0

[подробно]

Сообщение
модераторам

Отправлять сообщения
модераторам могут
только участники портала.
ВОЙТИ НА ПОРТАЛ »
регистрация »

Мини-форум консультации № 70944
dianacode

# 1

= общий = | 16.01.2007, 11:46

^_^ ошибка подкралась незаметно insert into cats_test_id values(0, 1, 5); и им подобным следует читать как: insert into cats_test values(0, 1, 5);

 

Возможность оставлять сообщения в мини-форумах консультаций доступна только после входа в систему.
Воспользуйтесь кнопкой входа вверху страницы, если Вы зарегистрированы или пройдите простую процедуру регистрации на Портале.

Яндекс Rambler's Top100

главная страница | поддержка | задать вопрос

Время генерирования страницы: 0.17761 сек.

© 2001-2019, Портал RFPRO.RU, Россия
Калашников О.А.  |  Гладенюк А.Г.
Версия системы: 7.77 от 31.05.2019
Версия JS: 1.34 | Версия CSS: 3.35