Codeigniter 2 объединяет таблицы запроса 3 ко многим - PullRequest
0 голосов
/ 29 мая 2018

У меня есть 3 таблицы

table1: documents (id, code, content)

table2: files (id, code, filename)

table3: tags (documentId, tag)

На моей странице я должен отобразить вседокументы в виде таблицы.как

code | content

123 | This is a sample document with file **files.filename** and tags **tags.tag**

Каждый документ может иметь много файлов и тегов

Это мой текущий код.

return $this->db
    ->select('t1.id, t1.barcode, t1.sub, t1.source_type, t1.sender, t1.address, t1.description, t1.receipient, t1.status, t2.id as fileId, t3.tag as docTag')
    ->select('DATE_FORMAT(t1.datetime_added, \'%m/%d/%Y-%h:%i %p\') as datetime_added', FALSE)
    ->from('documents as t1')
    ->join('files as t2', 't2.barcode = t1.barcode', 'left')
    ->join('tags as t3', 't3.id = t1.id')
    ->order_by('id', 'desc')
    ->get()->result_array();

Ответы [ 2 ]

0 голосов
/ 29 мая 2018

измените эту строку: ->join('tags as t3', 't3.id = t1.id') на

->join('tags as t3', 't3.documentid = t1.id') .

Также укажите таблицу при заказе по запросу:

  ->order_by('t1.id', 'desc').

Надеюсь, это поможет?

0 голосов
/ 29 мая 2018

Вы можете использовать этот запрос, он поможет вам

SELECT `doc`.`id`,
       (select GROUP_CONCAT(`tag`) from `tags` `tag` where `docid`=`doc`.`id` group by `docid`) as `tags`, 
      (select GROUP_CONCAT(`filename`)  from `files` where `docid`=`doc`.`id` group by `docid`) as `file`
FROM `document` `doc` 

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...