Отправляет email-рассылки с помощью сервиса Sendsay

RFpro.ru: Базы данных MySQL

  Все выпуски  

RusFAQ.ru: Базы данных SQL


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Базы данных SQL

Выпуск № 206
от 19.01.2007, 22:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 398, Экспертов: 49
В номере:Вопросов: 1, Ответов: 2


Вопрос № 70944: Здраствуйте уважаемые эксперты! Вот такой вопрос: В базе есть таблица cats такого типа: id (auto_inscrement) title parent В не содержаться названия категорий и их подкатегории причём категории имеют parent=0, а подкатегории ...

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

Вот такой вопрос:
В базе есть таблица 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. ).

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

Отправлен: 14.01.2007, 21:47
Вопрос задал: Golden Spider (статус: 6-ой класс)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: 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 ^_^

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

---------
There is more than one way to do it.
Ответ отправила: dianacode (статус: Студент)
Ответ отправлен: 14.01.2007, 23:39
Оценка за ответ: 5
Комментарий оценки:
Да я бы рад!
Но структуру делал не я! Хотя я всё таки попробую модернизировать базу. СПАСИБО!

Отвечает: Tek
Здравствуйте, 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'а - проверить на ситаксис не получиться
---------
WinApi - жутко неудобные костыли, MFC и VCL - немногим полезнее, но ничего лучше еще не создано (C)Почти Уинстон Черчилль :)
Ответ отправил: Tek (статус: 7-ой класс)
Ответ отправлен: 15.01.2007, 10:28
Оценка за ответ: 5
Комментарий оценки:
Попробую... Большое спасибо!


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2007, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
ООО "Мастер-Эксперт Про", Москва, 2007
Авторские права | Реклама на портале
Версия системы: 4.41 beta от 19.01.2007
Яндекс Rambler's Top100

В избранное