Задавайте вопросы, мы ответим
Вы не зашли.
/**** Запрос выборки ****/
SELECT book.id as id, book.title as title, book.price as price, book.desc as `desc`, group_concat(DISTINCT auth.author) as authots, group_concat(DISTINCT ganre.ganre) as ganres FROM `books` as book
left join `author_to_book` as auth_to ON book.id = auth_to.id_bta
left join `author` as auth ON auth_to.id_atb = auth.id_author
left join `ganre_to_book` as ganre_to ON book.id = ganre_to.id_btg
left join `ganre` as ganre ON ganre_to.id_gtb = ganre.id_ganre
where book.id IN (SELECT book.id FROM `books` as book
left join `author_to_book` as auth_to ON book.id = auth_to.id_bta
left join `author` as auth ON auth_to.id_atb = auth.id_author
left join `ganre_to_book` as ganre_to ON book.id = ganre_to.id_btg
left join `ganre` as ganre ON ganre_to.id_gtb = ganre.id_ganre
where ganre.ganre like '%$sGanre%' and auth like '%$sAuth%' and book.title like '%sTitle%' and `book`.`desc` like '$sDesc'
group by book.title) group by book.title
/**** !Запрос выборки ****/
Собственно входные данные вот (where ganre.ganre like '%$sGanre%' and auth like '%$sAuth%' and book.title like '%sTitle%' and `book`.`desc` like '$sDesc')
вот что у меня получилось
CREATE PROCEDURE `getBook`(sTitle VARCHAR(255),sGanre VARCHAR(255),sAuth VARCHAR(255),sDesc VARCHAR(255),
OUT oId INT,OUT oTitle VARCHAR(255),OUT oPrice DECIMAL,OUT oGanres VARCHAR(1000),OUT oAuthots VARCHAR(1000),OUT oDesc TEXT)
BEGIN
SELECT book.id INTO oId, book.title INTO oTitle, book.price INTO oPrice, book.desc INTO oDesc, group_concat(DISTINCT auth.author) INTO oAuthots, group_concat(DISTINCT ganre.ganre) INTO oGanres FROM `books` as book
left join `author_to_book` as auth_to ON book.id = auth_to.id_bta
left join `author` as auth ON auth_to.id_atb = auth.id_author
left join `ganre_to_book` as ganre_to ON book.id = ganre_to.id_btg
left join `ganre` as ganre ON ganre_to.id_gtb = ganre.id_ganre
where book.id IN (SELECT book.id FROM `books` as book
left join `author_to_book` as auth_to ON book.id = auth_to.id_bta
left join `author` as auth ON auth_to.id_atb = auth.id_author
left join `ganre_to_book` as ganre_to ON book.id = ganre_to.id_btg
left join `ganre` as ganre ON ganre_to.id_gtb = ganre.id_ganre
where ganre.ganre like sGanre and auth like sAuth and book.title like sTitle and `book`.`desc` like sDesc
group by book.title) group by book.title;
END;
естессно не работает, выдает #1327 - Undeclared variable: book
базку прикрепил.
Неактивен
У Вас какой-то адский запрос. Причем он неправильный как в варианте с ХП,
так и в PHP-варианте. Например, везде упоминается поле auth, которого в
базе нет. Что касается непосредственно book — когда используете DESC,
нужно использовать бэктики везде: book.`desc`.
Неактивен
я знаю что запрос адский. из за гребаной нормализации =/
мне нужно получить книгу с названием, ценой, описанием, всеми авторами и всеми жанрами (хранимыми в отдельных таблицах, и привязанными к книге в еще 2х отдельных таблицах, как видно в дампе)
вто же время если делать все через один селект то тепяетются все жанры или авторы кроме того по которому производилась выборка.
сам запрос рабочий, покрайней мере у меня работает.
а вот как из него сделать функцию я не знаю, вот и обратился к вам.
2 дня париля. не получается ничего.
Неактивен
если по русски то в таблице "книги" есть книга с ид=1 титул=ЙЙ цена=0 описание=ЕЕ
в таблице жанры есть жанр ид_ж=1 жанр=ж1 и ид_ж=2 жанр=ж2
в таблице авторы есть автор ид_а=1 автор=а1 и ид_а=2 автор=а2
в таблице связки например ид_книги=1 ид_автора=1 и ид_книги=1 ид_автора=2
что означает, что книга пренадледит авторам а1, а2
по анологии
в таблице связки например ид_книги=1 ид_жанра=1 и ид_книги=1 ид_жанра=2
что означает, что книга пренадледит авторам ж1, ж2
Неактивен
Сам запрос не рабочий — попробуйте, будет ошибка. По крайней мере, над теми
данными, которые Вы приложили. Я бы попробовал переписать его без подзапроса,
и выкинул лишние необдуманные LEFT JOIN (Вы фиксируете значения в подчинен-
ных таблицах, а значит можно использовать просто JOIN). Ну, а что делать с полем
auth — не представляю. Такого поля нету
P.S. А что делать с book — я описал.
Неактивен