Я соединяю три таблицы, но я хочу использовать значения одной из этих таблиц для двух других таблиц отдельно - PullRequest
0 голосов
/ 26 декабря 2018

У меня есть 3 таблицы вопросов, ответов и комментариев, где есть несколько ответов на один и тот же вопрос и много комментариев на один ответ.

Я хочу показать, кто ответил на вопрос и кто прокомментировал этот ответ.

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

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

Таблица: вопросы: id, текст, user_id (fk)

Таблица: ответы: id, que_id (fk), user_id (fk), текст

Таблица: комментарии:id, ans_id (fk), user_id (fk), текст

Таблица: пользователи: id, имя

$this->db->select('answers.id as aid,
                   answers.user_id as auser_id,
                   answers.text as atext,
                   comments.id as cid,
                   comments.user_id as cuser_id,
                   comments.text as ctext,
                   users.id as uid,
                   users.name as uname');
$this->db->from('answers');
$this->db->join('users','answers.user_id = users.id', 'left');
$this->db->join('ans_comments','answers.id = comments.ans_id', 'left');
$this->db->join('users','comments.user_id = users.id', 'left');
$this->db->where('que_id','1');
return $this->db->get();

Моя проблема заключается в том, что:

IЯ получаю одного и того же пользователя для всех комментариев.

Я хочу другой комментатор для разных комментариев.

1 Ответ

0 голосов
/ 26 декабря 2018

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

TESTED

$this->db->select('A.id AS A_id,
                   A.uid AS A_uid,
                   A.text AS A_text,
                   C.id AS C_id,
                   C.uid AS C_uid,
                   C.text AS C_text,
                   UA.id AS UA_id,
                   UA.name AS UA_name,
                   UC.id AS UC_id,
                   UC.name AS UC_name');
$this->db->from('answers AS A');
$this->db->join('comments AS C','C.aid = A.id', 'left');
$this->db->join('users AS UA','A.uid = UA.id', 'left');
$this->db->join('users AS UC','C.uid = UC.id', 'left');
$this->db->where('qid', 1);
$query = $this->db->get();

$result = $query->result_array();

Если вы заметили, я использовал другое имядля каждого объединения и использовал это имя для получения связанных данных, поэтому, если вы хотите использовать имя пользователя для ответа, вы будете использовать UA.name, а если вы хотите, чтобы оно использовалось для комментария, вы использовали бы UC.name, и оно дает вамвсе, что вам нужно.

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