Я только начал создавать веб-приложение в Codeigniter и не могу решить проблему с вложенными запросами в моей модели.
У меня есть три таблицы:
Категории, ссылки и темы.Каждая ссылка и каждая тема может иметь только одну категорию, тогда как каждая категория может иметь несколько ссылок или тем.
Каждая ссылка может иметь одну тему (или вообще не иметь темы), и каждая тема может иметь одну или несколько ссылок.
Структура таблицы выглядит следующим образом (сокращенно):
Categories:
- ID
- DESCR
Links:
- ID
- DESCR
- ID_CATEGORY
- ID_TOPIC (either an ID from the Topics-Table or NULL)
Topics:
- ID
- DESCR
- ID_CATEGORY
In my View, i want to display them in the following manner:
- Category 1
- Link 1
- Link 2
- Topic 1
- Topiclink 1
- Topiclink 2
- Link 3
- Category 2
- Topic 2
- Topiclink 3
- Topiclink 4
- Topic 3
- Topiclink 5
- Topiclink 6
- Link 4
Таким образом, будет 3 вложенных запроса.
Моя модель выглядит следующим образом:
public function get_categories(){
//1. Get the categories
$this->db->select("
ec.ID_CATEGORY,
c.DESCR,
c.VISIBLE,
i.KEYVALUE");
$this->db->from("episode_categories ec");
$this->db->join("categories c", "c.ID = ec.ID_CATEGORY");
$this->db->join("ini i", "i.SETTING = c.VISIBLE");
$this->db->where("i.KEYWORD", "CATEGORY_VISIBLE");
$this->db->where("ec.ID_EPISODE", $_SESSION['cur_episode']);
$categories = $this->db->get()->result_array();
//2. Get the Entries (Topics and Links with NULL as TOPIC_ID)
foreach($categories as $key => $value)
{
$sql_links="SELECT
pf_users.USERNAME,
pf_users.NAME_SHOW,
pf_links.ID AS ID,
pf_links.URL AS URL,
pf_links.ID_USER AS ID_USER,
pf_links.ID_EPISODE,
pf_links.ID_CATEGORY,
pf_links.DESCR,
NULL AS IS_TOPIC,
pf_links.REIHENF,
pf_links.DONE,
pf_links.DONE_TS,
pf_links.INFO AS INFO,
pf_episoden.DONE AS EPISODE_DONE
from pf_links
JOIN pf_users on pf_users.ID = pf_links.ID_USER
JOIN pf_episoden on pf_episoden.ID = pf_links.ID_EPISODE
WHERE ID_EPISODE = ".$_SESSION['cur_episode']." AND ID_CATEGORY = ".$value['ID_CATEGORY']." AND ID_TOPIC IS NULL
UNION ALL SELECT pf_users.USERNAME,
pf_users.NAME_SHOW,
pf_topics.ID AS ID,
NULL AS URL,
pf_topics.ID_USER AS ID_USER,
pf_topics.ID_EPISODE,
pf_topics.ID_CATEGORY,
pf_topics.DESCR,
1 AS IS_TOPIC,
pf_topics.REIHENF,
pf_topics.DONE,
pf_topics.DONE_TS,
pf_topics.INFO AS INFO,
pf_episoden.DONE AS EPISODE_DONE
from pf_topics
JOIN pf_users on pf_users.ID = pf_topics.ID_USER
JOIN pf_episoden on pf_episoden.ID = pf_topics.ID_EPISODE
WHERE ID_EPISODE = ".$_SESSION['cur_episode']." AND ID_CATEGORY = ".$value['ID_CATEGORY']." ORDER BY REIHENF,
ID ASC";
$query_links = $this->db->query($sql_links);
$categories[$key]['link_list'] = $query_links->result_array();
//3. Get the Topiclinks (Links with an ID_TOPIC set)
foreach( $categories[$key]['link_list'] as $key2 => $value2)
{
if($value2['IS_TOPIC'] == 1)
{
$sql_topic_links = "SELECT * FROM pf_links WHERE ID_TOPIC = ".$value2['ID'];
$query_topic_links = $this->db->query($sql_topic_links);
$categories[$key2]['topic_links'] = $query_topic_links->result();
}
}
}
return $categories;
}
Все работает нормально, пока не появятся ссылки на темы (Итак, Шаг 3 в Кодексе).Массив, который я получаю, одинаков для каждой ссылки на тему с последней из возможных ID_TOPIC.Так что ссылки в темах все одинаковые.
Что мне нужно изменить, чтобы получить только ссылки на конкретные темы на третьем шаге функции?
Заранее спасибо!