SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#26 12.02.2012 03:01:10

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: множественный запрос по трем таблицам ("многие- ко- многим") как?

Я не знаю как называются столбцы в ваших таблицах, но подозреваю, что вы себя перехитрили:
select idrec from link as t1 join
(select ids from tegs where name in ('красный','быстрый')) as t2 on t1.idrec=t2.ids


select id_1 from `связи` as t1 join
(select id_2 from `теги` where name in ($mass)) as t2 on t1.id_2=t2.id_2

Неактивен

 

#27 12.02.2012 03:05:14

Raulph
Участник
Зарегистрирован: 12.12.2011
Сообщений: 18

Re: множественный запрос по трем таблицам ("многие- ко- многим") как?

ids - id_1
idrec - id_2

соответственно таблица 'связи' (link)  у меня выглядит

ids     idrec
1         1
2         1


а так - да, заплел так заплел, сам уже путаюсь.))


таблица book - там 15 столбцов
таблица tegs - 2 столбца

Отредактированно Raulph (12.02.2012 03:13:17)

Неактивен

 

#28 12.02.2012 03:24:39

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: множественный запрос по трем таблицам ("многие- ко- многим") как?

Если в работающий запрос
select id_1 from `связи` as t1 join
(select id_2 from `теги` where name in ($mass)) as t2 on t1.id_2=t2.id_2

подставить
ids - id_1
idrec - id_2

то запрос будет иметь вид отличный от того, что вы привели в 25ом посте ?

Неактивен

 

#29 12.02.2012 03:32:04

Raulph
Участник
Зарегистрирован: 12.12.2011
Сообщений: 18

Re: множественный запрос по трем таблицам ("многие- ко- многим") как?

Блиииин... все, мозг вскипел.

поменял как "надо" теперь пишет - Unknown column 'idrec' in 'field list'   Но почему? ведь в list'е есть idrec(id_2)

select ids from link as t1 join
(select idrec from tegs where name in ('красный','быстрый')) as t2 on t1.idrec=t2.idrec

Отредактированно Raulph (12.02.2012 03:49:06)

Неактивен

 

#30 12.02.2012 03:35:56

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: множественный запрос по трем таблицам ("многие- ко- многим") как?

Покажите сам запрос на который пишет - Unknown column 'idrec' in 'field list' , а также
show create table link
show create table tegs
show create table book

Неактивен

 

#31 12.02.2012 03:42:30

Raulph
Участник
Зарегистрирован: 12.12.2011
Сообщений: 18

Re: множественный запрос по трем таблицам ("многие- ко- многим") как?

Знаете, спасибо Вам большое! У меня есть работающий запрос, а поскольку старая база не еще "забита", мало того, читая этот форум я нашел немало недочетов - я все таки сформирую новую. Мне интересно строить дальше, а в чем проблема со старой - где-то просто тупо отпечатался. (уверен если продолжим копать, в конце это и выяснится smile )  А впереди еще столько интересного!
Еще раз спасибо!

Отредактированно Raulph (12.02.2012 03:43:22)

Неактивен

 

#32 15.02.2012 04:13:12

Raulph
Участник
Зарегистрирован: 12.12.2011
Сообщений: 18

Re: множественный запрос по трем таблицам ("многие- ко- многим") как?

Хех.. снова я.
поправил базу, но результат неутешительный.

SELECT t.* FROM book AS t
JOIN
(SELECT ids FROM link AS t1
JOIN
(SELECT ids FROM tegs WHERE name IN ('для детей', 'праздничное')) AS t2 ON t1.idrec=t2.ids GROUP BY t1.ids HAVING count(*)=2) AS t3 ON t.idrec=t3.ids;


пишет: Типа ошибка#1052 - Column 'ids' in field list is ambiguous
в интрнетах пишут что используются смесь явных и неявных соединений. Не в курсе что это. Может есть мысли?

Проблема решена! (надо было уточнить "родительскую" таблицу)

SELECT t.* FROM book AS t
JOIN
(SELECT 't1.ids' FROM link AS t1
JOIN
(SELECT ids FROM tegs WHERE name IN ('для детей', 'праздничное')) AS t2 ON t1.idrec=t2.ids GROUP BY t1.ids HAVING count(*)=2) AS t3 ON t.idrec=t3.ids;

Отредактированно Raulph (15.02.2012 04:35:17)

Неактивен

 

#33 16.02.2012 04:30:36

Raulph
Участник
Зарегистрирован: 12.12.2011
Сообщений: 18

Re: множественный запрос по трем таблицам ("многие- ко- многим") как?

Вот придумал (не без помощи Василия) запрос без Join'ов. (честно говоря на моей базе почему-то корректно работает только он, хотя на синтетической базе запрос с join'ами работал безукоризненно!)

SELECT * FROM book WHERE id_1 IN (SELECT link.id_1 FROM link WHERE id_2 IN (SELECT tegs.id_2 FROM tegs WHERE name IN ($mass))GROUP BY link.id_1 HAVING COUNT(*) = N);


К сожалению ни один из запросов не позволяет получить "остаточные" теги, то есть например если есть 10 открыток с тегом "праздничные", то после их вывода были доступны только те теги, которые характеризуют именно эту десятку, что бы следующим поиском сократить найденное, и не получить ошибку "нет открытки соответствующей указанным тегам".
По любому видимо нужно два запроса.

Отредактированно Raulph (16.02.2012 04:32:10)

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson