powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Таблица связей, считающая себя и исключающая себя
10 сообщений из 10, страница 1 из 1
Таблица связей, считающая себя и исключающая себя
    #38549567
wolfandman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет! Мучаюсь третий день подряд.

Схема обычная.

--------------------------------

4 таблицы:

табличка "курсы":
id, title
1 Лётные курсы
2 Медицинские курсы
3 Английский курсы

табличка "группы свойств":
id, title
1 Время проведения
2 Обед
3 Город

табличка "свойства"
id, groupID, title
1 1 Утро
2 1 Вечер
3 2 Обед платный
4 2 Обеда бесплатный
5 3 Москва
6 3 Питер

табличка связей:
courseID, groupID, varID
1 1 1
1 2 3
1 3 4

и т.д.

Иными словами, курсу может соответствовать любой параметр.

---------------------------------

Такой запрос нужен:
1. сколько каждому из 6 параметров соответствует курсов, в которых есть обед.
2. сколько каждому из 6 параметров соответствует курсов, в которых есть обед и которые проходят утром.

Известно, что при поиске в каждой группе параметров может быть только один выбранный параметр (радио), то есть или утро или вечер, но не вместе.

Получается поиск кол-ва курсов во всех параметрах с учётом уточняющих параметров. Это делается для поиска курсов по шагам. Получается древовидный поиск.

Укажите дорогу, куда идти.

Спасибо!
...
Рейтинг: 0 / 0
Таблица связей, считающая себя и исключающая себя
    #38549633
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wolfandman табличка связей:
courseID, groupID, varID
1 1 1
1 2 3
1 3 4Выделенное объясните. желательно всю строку.
...
Рейтинг: 0 / 0
Таблица связей, считающая себя и исключающая себя
    #38549895
wolfandman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tanglir, конечно я допустил ошибку. Извините пожалуйста!

Вот как надо:

Код: plaintext
1.
авторcourseID | groupID | varID
1 | 1 | 1
1 | 2 | 3
1 | 2 | 4

Я хотел сказать, что
Лётный курс занимается утром и предоставляет как платный обед, так и бесплатный обед.

groupID - группа свойств - я её ввёл по сути только для поиска. Знаю, что может пригодиться, но пока не знаю где.
...
Рейтинг: 0 / 0
Таблица связей, считающая себя и исключающая себя
    #38549997
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wolfandmanВот как надо:

Код: plaintext
1.
авторcourseID | groupID | varID
1 | 1 | 1
1 | 2 | 3
1 | 2 | 4
Я хотел сказать, что
Лётный курс занимается утром и предоставляет как платный обед, так и бесплатный обед.Ну это понятно.
Но тогда в чём заключается вопрос:wolfandmanсколько каждому из 6 параметров соответствует курсов, в которых есть обед.? Ведь "есть обед" - это тоже параметр?
Или именно это и имеется в виду "для каждого свойства найти все курсы, которые: а)имеют это свойство И б)на них есть обед"? То есть курсы с обедом в результате будут всегда.
...
Рейтинг: 0 / 0
Таблица связей, считающая себя и исключающая себя
    #38550021
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если так, то это баянистая задача поиска по EAV. Например так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
select prop.name,t0.courseid
from prop
left join link on prop.id=link.varid
left join (
 select courseid
 from link
 where varid in (a1,a2,...aN)
 group by 1 having count(*)=N
) t0 on link.courseid=t0.courseid
order by 1

Выделенный кусок - поиск курсов, имеющих ровно N параметров a1...aN. Например, для случая "бесплатный обед" N=1, a1=3. Для случая "обед" N=1, a1=4. Для случая "любой обед" N=2, a1=3, a2=4. Думаю, идея ясна?
...
Рейтинг: 0 / 0
Таблица связей, считающая себя и исключающая себя
    #38550184
wolfandman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tanglir, вы правильно поняли. Ваш код работает! Большое вам спасибо!

Join(Selec...) t0 - Это фантастика для меня )) Надо конечно поизучать ещё SQL...

Только вот ещё вопрос. Дело в том, что поиск я организовываю через Sphinxql, то нужно эти места:

автор where t0.varID in (13,1,11,5,9,10)
group by 1 having count(*)=6 сделать меняемыми снаружи. Вы представляете как это можно сделать?

Скорее всего придётся отойти от вида Join (Select...) t0. Как можно это обойти?
...
Рейтинг: 0 / 0
Таблица связей, считающая себя и исключающая себя
    #38550678
wolfandman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Mysql поддерживает переменные пользователя? Можно ли составит запрос таким образом:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
select prop.name,t0.courseid
from prop
left join link on prop.id=link.varid
left join (
 select courseid
 from link
 where varid in (myVar1)
 group by 1 having count(*)=myVar2
) t0 on link.courseid=t0.courseid
where myvar1="1,2" AND myVar2=2
order by 1


?
...
Рейтинг: 0 / 0
Таблица связей, считающая себя и исключающая себя
    #38550700
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wolfandmanMysql поддерживает переменные пользователя?Есть переменные и есть parameter markers . Но ни то, ни другое не позволяет передать в IN несколько значений, насколько я в курсе.
...
Рейтинг: 0 / 0
Таблица связей, считающая себя и исключающая себя
    #38550724
wolfandman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А что же тогда делать?
Можно ли сделать этот запрос как-то иначе?
...
Рейтинг: 0 / 0
Таблица связей, считающая себя и исключающая себя
    #38550800
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wolfandmanА что же тогда делать?Можно собрать запрос конкатенацией из фрагментов непосредственно перед выполнением. В некоторых библиотеках/компонентах доступа для этого есть готовые средства.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Таблица связей, считающая себя и исключающая себя
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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