Имеются две таблицы clients_case и clients следующей структуры
Clients
clients_case
+----+-------------------------------------+------------+
| id | cctitle | ccclients |
+----+-------------------------------------+------------+
| 1 | Подготовка бизнес-плана | 2, 3, 7 |
| 2 | Перевод документов | 4,5 |
+----+-------------------------------------+------------+
clients
+----+-------------------------------+
| id | clname |
+----+-------------------------------+
| 1 | Клиент 1 |
| 2 | Клиент 2 |
| 3 | Клиент 3 |
| 4 | Клиент 4 |
| 5 | Клиент 5 |
| 6 | Клиент 6 |
| 7 | Клиент 7 |
+----+-------------------------------+
На сайте происходит вывод списка case-ов (по 10 на страницу) с подсписком имен клиентов.
$sql = "SELECT cc.id, cc.cctitle, cc.ccclients, GROUP_CONCAT(CONCAT(cl.id,',', CAST(cl.clname AS CHAR)) ORDER BY cl.clname SEPARATOR ';') AS cln
FROM clients_case AS cc
LEFT JOIN clients AS cl ON FIND_IN_SET (cl.id, cc.ccclients) > 0
GROUP BY cc.id";
$data = $this->db->select_limit($sql, 0, $size);
правильное ли выбрано решение, или лучше создать еще одну таблицу
case_to_case
+----+--------------+-----------+
| id | client_id | case_id |
+----+--------------+-----------+
| 2 | 2 | 1 |
| 3 | 3 | 1 |
| 4 | 4 | 2 |
| 5 | 5 | 2 |
| 7 | 7 | 1 |
+----+--------------+-----------+
и делать запрос следующим образом
$sql = "SELECT * FROM clients_case";
$data = $this->db->select_limit($sql, 0, $size);
$sql = "SELECT DISTINCT cc.*, cc.id AS id, cl.*
FROM case_to_case AS cc
LEFT JOIN clients AS cl ON cl.id = cc.client_id
GROUP BY cl.id";
$data2 = $this->db->query($sql);
foreach($data as $k => $v)
{
foreach($data2 as $k2 => $rec)
{
if($rec['case_id'] == $v['id'])
{
$data[$k]['clients'][] = $data2[$k2];
}
}
}
Какой, по вашему мнению, более правильный вариант реализации?