forum.bitel.ru http://forum.bitel.ru/ |
|
Через SQL получить список субдоговоров для супердоговора http://forum.bitel.ru/viewtopic.php?f=19&t=7347 |
Страница 1 из 1 |
Автор: | Phricker [ 26 окт 2012, 14:41 ] |
Заголовок сообщения: | Через SQL получить список субдоговоров для супердоговора |
И снова обращаюсь за помощью к знатокам. Необходимо через SQL запрос получить список всех супердоговоров или же договоров не привязанных ни к кому (юридические лица), и во втором поле получить через запятую список ВСЕХ субдоговоров этого договора (зависимых и независимых) Ситуация осложняется тем, что поле sub_list используется только для зависимых субдоговоров. Все независимые субдоговора прописывают у себя в поле scid - ID супердоговора. Чем руководствовалась такая логика непонятно ![]() Должно выглядеть как-то так Код: ID супердоговора, Title, sub_list и в sub_list через запятую все субдоговора. Если субдоговоров нет - то поле sub_list пустое |
Автор: | Phricker [ 26 окт 2012, 14:48 ] |
Заголовок сообщения: | Re: Через SQL получить список субдоговоров для супердоговора |
Необходимо нечто вроде Код: getSubContracts(int cid) Получает все субдоговоры данного договора. из ContractManager |
Автор: | Phricker [ 26 окт 2012, 15:18 ] |
Заголовок сообщения: | Re: Через SQL получить список субдоговоров для супердоговора |
Можно вот так Код: SELECT c.id, c.title, c.comment, CONCAT_WS(",",(SELECT sub_list FROM contract WHERE id = c.id), (SELECT GROUP_CONCAT(id) FROM contract WHERE scid = c.id)) FROM contract AS c WHERE c.fc = 1 AND c.scid <= 0 Но тогда подставляется лишняя запятая впереди. Мешает ![]() Вот например для трех договоров у первого из которых все субдоговора зависимые, у второго есть независимый субдоговор, а третий свободен Код: mysql> SELECT c.id, c.title, c.comment, CONCAT_WS(",",(SELECT sub_list FROM contract WHERE id = c.id), (SELECT GROUP_CONCAT(id) FROM contract WHERE scid = c.id)) -> FROM contract AS c -> WHERE c.fc = 1 -> AND c.scid <= 0 -> AND c.title IN ('IPN000003', 'DP010746', 'PH000909'); +-------+-----------+----------------------------------+---------------------------------------------------------------------------------------------------------------------------+ | id | title | comment | CONCAT_WS(",",(SELECT sub_list FROM contract WHERE id = c.id), (SELECT GROUP_CONCAT(id) FROM contract WHERE scid = c.id)) | +-------+-----------+----------------------------------+---------------------------------------------------------------------------------------------------------------------------+ | 8853 | DP010746 | ▒▒▒▒▒▒▒▒▒▒▒▒▒ ▒▒ "▒▒▒▒▒▒▒ ▒▒▒▒▒" | 9023,9024,9025,12043,12131,12133,12134,15888,15897,18508,9023,9024,9025,12043,12131,12133,12134,15888,15897,18508 | | 2325 | IPN000003 | ▒▒▒ "▒▒▒▒▒" | ,3848 | | 94840 | PH000909 | ▒▒▒ "▒▒▒▒▒" | | +-------+-----------+----------------------------------+---------------------------------------------------------------------------------------------------------------------------+ 3 rows in set (0.00 sec) Эта лишняя запятая ![]() |
Автор: | Phricker [ 26 окт 2012, 17:54 ] |
Заголовок сообщения: | Re: Через SQL получить список субдоговоров для супердоговора |
Вместо CONCAT_WS использовать CONCAT - и вроде бы все получается ![]() Сейчас еще тестирую |
Страница 1 из 1 | Часовой пояс: UTC + 5 часов [ Летнее время ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |