MySQL множественный выбор - PullRequest
1 голос
/ 23 августа 2009

У меня есть indextable, который содержит content_id и тип colomn. (например, content_id = 1, type = audio. content_id = 1, type = video) Можно ли получить правильные данные на основе content_id из правильных таблиц (таблиц: contentvideo, contentaudio)?

Ответы [ 2 ]

1 голос
/ 23 августа 2009

Я так понимаю, вы хотите получить контент с помощью одного оператора select? Если макет ваших таблиц контента точно такой же, вы можете использовать UNION :

SELECT ca.* FROM contentaudio ca, indextable it
 WHERE ca.content_id = it.content_id
   AND it.content_type = 'audio'
UNION
SELECT cv.* FROM contentvideo cv, indextable it
 WHERE cv.content_id = it.content_id
   AND it.content_type = 'video'
ORDER BY content_id /* or whatever */

Обратите внимание, что если content_id не является уникальным во всех ваших content таблицах, вы можете получить несколько записей (разных типов) для одной и той же content_id. Также обратите внимание, что если вы выбираете конкретную запись на основе некоторого ключа indextable, вам нужно будет добавить его к каждой части объединения.

Если ваши content таблицы имеют различные макеты, вы можете вместо этого использовать OUTER JOIN и извлекать различные типы контента как часть одной записи (пропущенные будут возвращены как Значения NULL):

SELECT * FROM indextable it
  LEFT OUTER JOIN contentaudio ca ON it.content_id = ca.content_id
  LEFT OUTER JOIN contentvideo cv ON it.content_id = cv.content_id
 WHERE it.some_key = ?

Обратите внимание, что content_type в этом случае вообще не задействован (и при этом он вам не нужен).

0 голосов
/ 23 августа 2009

Вы пробовали CASE или IF?

http://dev.mysql.com/doc/refman/6.0/en/case-statement.html

...