При выборе View Item возвращается значение Null (таблица ссылок контрольного списка)
Кажется, у меня проблема с запросом, показывающим конкретный элемент, если он находится в таблице контрольных списков. В настоящее время у меня есть несколько таблиц, основными из которых являются пользователь, персонаж, серия, предмет и контрольный список. Персонаж и серия связаны в таблицу элементов, а пользователь и элемент - в таблице контрольных списков.
Это работает следующим образом: если пользователь, вошедший в систему, нажал кнопку на элементе, которого нет в таблице контрольных списков, этот элемент будет добавлен в таблицу контрольных списков (если в состоянии контрольного списка будет показана кнопка удаления),
То, что я сейчас работаю, это следующее:
- Если пользователь не авторизован и находится на главной странице: Показать все элементы с X
- Если пользователь вошел в систему и на главной странице: Показать все элементы, не входящие в
таблица контрольного списка с X и все элементы таблицы контрольного списка с
Поставить галочку. - Если пользователь не вошел в клики, просмотрите более подробную информацию об элементе:
Показать более подробную информацию об элементе с помощью X (страница отдельного элемента)
What I am trying to achieve now is if a user is logged in and clicks view more details, to show the individual item page with a X or Tick (Depending if in checklist table). This is kinda working as items which are in the checklist table can be selected to view the individual item page when logged in. However if the item is not in the checklist table and the user is logged in, nothing is returned back. I am at a total loss how to resolve this and am trying to avoid copying all the items into the checklist table with an additional field (Y/N).
Это запрос, который я использую, чтобы получить конкретную информацию об элементе, если пользователь вошел в систему, в которой я использую codeigniter:
$this->db->select('item.item_id AS item_id, item.item_image AS item_image, line.line_name AS line_name, series.series_name AS series_name, character.character_name AS character_name, checklist.checklist_id AS checklist_id');
$this->db->from('item');
$this->db->join('line', 'item.line_id = line.line_id', 'left');
$this->db->join('series', 'item.series_id = series.series_id', 'left');
$this->db->join('character', 'item.character_id = character.character_id', 'left');
$this->db->join('checklist', 'checklist.item_id = item.item_id', 'left');
$this->db->where('checklist.users_id', $user_id);
$this->db->or_where('checklist.users_id IS NULL'); // Also tried without this line
$this->db->where('item.item_id', $item_id);
$query = $this->db->get();
return $query->row_array();
Любая помощь была бы очень полезна, так как остальные три запроса выполняются так, как задумано, что совпадает с приведенным выше, за исключением Return ($query->result_array) и добавленного or_where (checklist.users_id IS NULL).
1 ответ
Похоже, я нашел исправление. Я переместился, где идентификатор элемента в соединении, изменил or_where на где и где на or_where. Итак, рабочий код следующий:
$this->db->select('item.item_id AS item_id, item.item_image AS item_image, line.line_name AS line_name, series.series_name AS series_name, character.character_name AS character_name, checklist.checklist_id AS checklist_id');
$this->db->from('item');
$this->db->join('line', 'item.line_id = line.line_id', 'left');
$this->db->join('series', 'item.series_id = series.series_id', 'left');
$this->db->join('character', 'item.character_id = character.character_id', 'left');
$this->db->join('checklist', 'checklist.item_id = item.item_id', 'left');
$this->db->where('item.item_id', $item_id);
$this->db->or_where('checklist.users_id', $user_id);
$this->db->where('checklist.users_id IS NULL');
$query = $this->db->get();
return $query->row_array();
Не совсем уверен, что or_where должен быть выше где, но он работает для того, что мне тоже нужно.