2015-06-16 2 views
2

У меня есть 3 таблицы (теги, тег, портфель)Можно ли объединить эти 3 запроса в один запрос MySQL?

метки имеют 2 поля -> tags_id (AI), tags_name

тег имеет 3 поля -> tag_id (ая), tag_oid ​​(portfolio_id), tag_tid (tags_id)

портфель имеет много полей -> portfolio_id и т.д.

Я хочу, чтобы соответствовать портфолио записей, которые были помечены «PD-02». Я смог сделать это в трех отдельных запросах и пытался объединить их в один запрос. В таблице тегов содержится имя/название тега, а таблица таблиц тегов создает связь с именами тегов в других табличных портфолио.

$tags = query_select(
    "SELECT * 
    FROM tags 
    WHERE tags_name = 'PD-02'"); 

if (!empty($tags)) { 
    $related_portfolios = query_select(
     "SELECT * 
     FROM tag 
     WHERE tag_tid = $tags[0]['tags_id']" 
    ); 

    if (!empty($related_portfolios)) { 
     $portfolios = array(); 
     foreach ($related_portfolios as $tkey => $tag) { 
      $portfolios[] = query_select("SELECT * FROM portfolio WHERE portfolio_id = $tag['tag_oid']"); 
     } 
    } 
} 
+0

возможно, [да] (https://en.wikipedia.org/wiki/Join_%28SQL%29). –

ответ

2

Вы можете попробовать с inner join:

select p.* 
from portfolio p 
join tag t on p.portfolio_id = t.tag_oid 
join tags ts on ts.tags_id = t.tag_tid 
where ts.tags_name = 'PD-02' 
0

Этот запрос может работать.

SELECT * 
FROM tags, tag, portfolio 
WHERE tags.tag_name='PD-02' 
AND tags.tag_id=tags.tags_id 
AND tags.tag_oid=portfolio.portfolio_id; 
Смежные вопросы