powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Спайка всех данных приJOINой таблицы в одну строку.
6 сообщений из 6, страница 1 из 1
Спайка всех данных приJOINой таблицы в одну строку.
    #38545787
_Промешан_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет. Перекочевал из MSSQL в MySQL.

Суть задачи проста - есть некие страницы и к ним, к примеру, ссылки на блоги, комментарии и тд:
Есть таблицы
A (id, page)
(1, 'abc')
(2, 'cde')
B (id, blog)
(1, 'blog_1')
(2, 'blog_2')
(3, 'blog_3')
B2A (a_id, b_id)
(1, 1)
(1, 2)
(2, 3)

Запрос примерно такой

Код: sql
1.
2.
3.
4.
SELECT a.*,b.blog as BLOGS FROM A 
  LEFT JOIN B2A ON B2A.a_id = A.id
  LEFT JOIN B ON B.id = B2A.b_id  
WHERE A.id = 1



В данном запросе будет две строки данных благодаря связке в B2A.
Есть ли какой-то способ (как это есть в MSSQL типа xml for path()) соединить в поле BLOGS результаты выборки из таблицы B, таким образом сократив набор данных до одной строки, чтобы получилось: 1 страница + 2 блога (записи имеются в виду или нечто подобное).

Благодарю за любые ответы по теме. Вопрос не направлен на изменение структуры, скорее чисто гипотетический и на интерес, но при этом я открыт к любым другим обсуждениям.
...
Рейтинг: 0 / 0
Спайка всех данных приJOINой таблицы в одну строку.
    #38545814
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Промешан_,

в рамках классического СКЛ вы всегда получаете
одинаковые записи. Т.е. вернуть обьект/структуру
"1 страница + 2 блога" в явном виде невозможно.

Есть ограниченый вариант группировки "детишек":

Код: sql
1.
2.
3.
4.
5.
6.
SELECT a.*,group_concat(b.blog) as BLOGS 
FROM A 
  LEFT JOIN B2A ON B2A.a_id = A.id
  LEFT JOIN B ON B.id = B2A.b_id  
WHERE A.id = 1
group by A.id



нои уже проше будет сделать один запрос на А-родителя
и другой отдельный запрос на Б-детишек.

Некоторые фрейворки (RoR, CakePHP, и др) умеют
делать единые запросы на родителей-детишек
и разбирать их у себя на фремворке.

Для начала я всоветую не мудрствовать лукаво и делать
несколько простых запросов.
...
Рейтинг: 0 / 0
Спайка всех данных приJOINой таблицы в одну строку.
    #38545864
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GROUP BY + GROUP_CONCAT()
...
Рейтинг: 0 / 0
Спайка всех данных приJOINой таблицы в одну строку.
    #38545914
_Промешан_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо всем!
Похоже то, что надо.
Единственное я так понял есть ограничение. ЕГо можно какой то командой выставить на весь срок службы сервера или надо каждый раз в запросе/инициализации конекта?
...
Рейтинг: 0 / 0
Спайка всех данных приJOINой таблицы в одну строку.
    #38545991
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Промешан_,

http://dev.mysql.com/doc/refman/5.0/en/server-system-variables.html#sysvar_group_concat_max_len

можно выставить в сессии, глобально на текуший запуск,
в командной строке при запуске или в my.cfg:

например в my.cfg:

group_concat_max_len=16K
...
Рейтинг: 0 / 0
Спайка всех данных приJOINой таблицы в одну строку.
    #38546029
_Промешан_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
javajdbc,

есть какие то идеи или знания, почему было изначально такое ограничение в 1024?
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Спайка всех данных приJOINой таблицы в одну строку.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]