2016-11-10 4 views
-1

У меня есть 3 таблицы: один называется «документы» один называется «метки» и один называется «documents_tags»Inner Регистрация подвыбор в отдельной колонке

В таблице «document_tags» У меня есть 3 колонки: ID, document_id, tag_id , что означает, что через эту таблицу теги muliple могут быть связаны с несколькими документами.

Теперь я хочу потушить все наборы табличных «тегов» и в каждой строке результатов я хочу иметь «1», если тег связан с документом ID «3» (в таблице document_tags) и a "0", если нет.

Возможно ли это в одном запросе?

+1

Да, вы можете сделать это с 'LEFT OUTER JOIN'. Если совпадающая строка не найдена, столбцы в таблице 'document' будут' NULL'. Вы можете использовать 'IF (document.id IS NULL," 0 "," 1 ")' для нужного столбца. – Barmar

+0

Извините, я новичок и не смогу найти решение ;-( –

+0

Можете ли вы дать мне еще один совет. Как написано, я хочу сгенерировать следующий запрос: SELECT ID, title, (Выбрать * from documents_tags WHERE document_id = 3 и tag_id = [тег соответствующей строки результата] в качестве привязанных тегов FROM ... Где поместить левое внешнее соединение и как я могу ссылаться на то, что я написал как «[тег соответствующей строки результата]»? Извините, мой английский не так хорошо ... –

ответ

0

Используйте LEFT JOIN

SELECT t.id, t.title, IF(dt.document_id, 0, 1) as linked 
FROM tags AS t 
LEFT JOIN documents_tags AS dt ON dt.tag_id = t.id AND dt.document_id = $doc_id 
Смежные вопросы