2015-01-15 4 views
0

Таблица: BookmarkMySQL левое внешнее объединение нескольких таблиц

bid  bname tagid1  tagid2  tagid3 
-------------------------------------------------------------------- 
    1  bookmark1 1001  1002  1003 
    2  bookmark2 1002     1005 
    3  bookmark3    1003  1003 
    4  bookmark4       1003 
    5  bookmark5 1001     
    6  bookmark5 1002     1003 

Таблица: Tag

tagid  tagname 
-------------------------- 
    1001  Java 
    1002  PHP 
    1003  Ruby 
    1004  Node.js 
    1005  Go 

В результате я ожидаю получить это:

bid  bname tagName1 tagName2 tagName3 
-------------------------------------------------------------------- 
    1  bookmark1 Java  PHP   Ruby 
    2  bookmark2 PHP      Go 
    3  bookmark3    Ruby  Ruby 
    4  bookmark4       Ruby 
    5  bookmark5 Java     
    6  bookmark5 PHP      Ruby 

Как мог Я понял?

+1

Ваши тэги фиксированные номера? или гибкий –

+0

В таблицу тегов один раз за каждый тег в таблице закладок. – jpw

+0

@POHH ​​auto_increment –

ответ

5

Вам нужно присоединиться к одной и той же таблице несколько раз. Вам нужен псевдоним таблицы для каждого из них, чтобы отличить их

select b.id, b.bname, 
     t1.name as tagName1, 
     t2.name as tagName2, 
     t3.name as tagName3 
from bookmark b 
left join tag t1 on t1.tagid = b.tagid1 
left join tag t2 on t2.tagid = b.tagid2 
left join tag t3 on t3.tagid = b.tagid3 

BTW вы должны рассмотреть вопрос об изменении вашего дизайна таблицы, добавив еще одну таблицу для отображения закладок-тегов. Тогда вы можете иметь любое количество тегов для каждой закладки.

+2

Я думаю, что стоит сказать, что это для фиксированного количества тегов. –

+0

Текущий дизайн таблицы имеет ровно 3 возможных тега –

+0

Да, вы правы, не обращали внимания на таблицу закладок. +1 –

Смежные вопросы