Можно ли сделать динамический выбор таблицы в mysql?

Пытался сделать запрос который бы присоединял определенную таблицу во время выполнения
SELECT 
`p_id`,
`d_id`,
`iner_table`.`name`,
`iner_table`.`description`,
`dp_links_and_doska`.`section`,
`dp_links_and_doska`.`subsection`,
`dp_links_and_doska`.`inserted` as `date`,
`type` 
FROM `dp_links_and_doska`
/*INNER JOIN IF(`type`=2,`photocat`,`doska_new`) as iner_table ON `dp_links_and_doska`.`p_id`=`iner_table`.`id`*/
WHERE `d_id`='2'
ORDER BY  `date` DESC LIMIT 0,20

На данную конструкцию ругается(
Можно ли как то подставлять таблицу для INNER JOIN Динамически исходя из данных основного запроса?
  • Вопрос задан
  • 335 просмотров
Пригласить эксперта
Ответы на вопрос 2
@dmitryi_k Автор вопроса
Придумал вот такое решение
SELECT 
`p_id`,
`d_id`,
if(`iner_table`.`name` IS NOT NULL,`iner_table`.`name`,`iner_table2`.`name`) as `name`,
if(`iner_table`.`description` IS NOT NULL,`iner_table`.`description`,`iner_table2`.`text`) as `text`,
`dp_links_and_doska`.`section`,
`dp_links_and_doska`.`subsection`,
`dp_links_and_doska`.`inserted` as `date`,
`type`
FROM `dp_links_and_doska`
LEFT OUTER JOIN  `photocat` as `iner_table` ON `dp_links_and_doska`.`p_id`=`iner_table`.`id`
LEFT OUTER JOIN  `doska_new` as `iner_table2` ON `dp_links_and_doska`.`p_id`=`iner_table2`.`id`
WHERE `d_id`='3'
ORDER BY  `date` DESC LIMIT 0,20
Ответ написан
Комментировать
suguby
@suguby
программист, python, django, mysql, git, hg, linux
LEFT OUTER JOIN тяжеловесны и медленны - мускулю приходится матчить всё, фулл скан таблицы. Мне кажется у вас в архитектуре таблиц косяк - нужно сделать базовую таблицу, куда вынести общие для `photocat`,`doska_new` поля.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы