как выбрать строку из одной из трех таблиц на основе четвертой таблицы, которая содержит порядок этих записей из всех трех таблиц - PullRequest
1 голос
/ 17 мая 2011

поэтому у меня есть три таблицы с содержимым и одна содержит порядок строк этих трех таблиц

вот таблицы

table content_order
id | content_type | content id
1 | content1 | 1
2 | content1 | 2
3 | content3 | 1
4 | content2 | 1

table content1
id | some_text
1 | aaaa
2 | bbb

table content2
id | some_text
1 | text yyyy

table content3
id | some_text
1 | text bbbb

так как мне получить это?

content_type | some_text | content_id
content1 | aaaa | 1 | 
content2 | bbb | 2 | 
content3 | yyyy | 1 | 
content2 | bbbb | 1 | 

Ответы [ 2 ]

1 голос
/ 17 мая 2011

Это будет работать на t-sql, для mysql могут быть небольшие различия.

select co.content_type,
       coalesce(c1.some_text,c2.some_text,c3.some_text) as some_text,
       coalesce(c1.id,c2.id,c3.id) as content_id
from content_order co
left join content1 c1 on co.content_id = c1.id and co.content_type = 'content1'
left join content2 c2 on co.content_id = c2.id and co.content_type = 'content2'
left join content3 c3 on co.content_id = c3.id and co.content_type = 'content3'
order by co.id
0 голосов
/ 17 мая 2011

Попробуйте это:

SELECT content_type, some_text, id as content_id
FROM (
               SELECT 'content1' as content_type, content1.Id, content1.some_text
     UNION ALL SELECT 'content2', content2.Id, content2.some_text
     UNION ALL SELECT 'content3', content3.Id, content3.some_text) contents
JOIN content_order
  ON content_order.content_type = contents.content_type
 AND content_order.content_Id = contents.Id
ORDER BY content_order.id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...