Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Получение вложений к комментариям / 9 сообщений из 9, страница 1 из 1
25.11.2013, 17:48:45
    #38477116
zironix
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение вложений к комментариям
Здравствуйте, у меня следующая проблема, есть две таблицы, таблица комментариев и таблица вложений к ним, связываются они по полю id_comment в таблице вложений и id в таблице комментариев.

Проблема в том, что я не знаю как правильно получать и выводить комментарии сразу с вложениями, интересует именно правильный способ, лучший в плане производительности. Мне на ум приходит лишь следующее:

1) выбирать комментарии объединив пути к вложениям с помощью group_concat, а затем, при выводе, разбивать в explode() по разделителю (подозреваю что может выскочить лимит на длину строки в group_concat, вроде 1024 по умолчанию).

2) при проходе по комментариям делать по запросу для каждого из них и получать вложения.

3) сделать обычный join, появятся дубликаты комментариев, с помощью php брать комментарий из первого, при повторении брать только вложения из остальных.

Все эти способы кажутся мне извращенством, но гугление не дало результатов, если кто подскажет оптимальное решение данной проблемы - буду очень благодарен.
...
Рейтинг: 0 / 0
25.11.2013, 20:42:28
    #38477302
javajdbc
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение вложений к комментариям
zironix,

В большинстве случаев -- третий вариант с жоинтом.
Но бывает по разному.
В первую очередь -- анализируйте требования к показу.

Если коментариев несколько или строго заданое количесво
(10-20 на страницу) и надо показать вложения сразу(!) для
всех коментариев --- тогда жоинт однозначно.

НО лучше продумать какойнибудь "ленивый" процесс,
когда пользователь видит коментарий и количество вложений
и если захочет, то ткнет еше одну кнопку и получит
вложения только для заданого коментария.
Это хорошо если вложения тяжелые.
AJAX тоже полезно будет для скорости.

при "ленивом" варианте первый запрос будет легким
а по требованию будут отдельные запросы на
вложения для одного коментария.
...
Рейтинг: 0 / 0
25.11.2013, 22:26:22
    #38477371
Arhat109
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение вложений к комментариям
javajdbc,

если вложений несколько к одному комментарию, то можно избежать дубликатов через GROUP_CONCAT вложений внутри джойна и разверткой их на клиенте обратно в список вложений. Но это если они - легкие.

а можно ещё предложить джойнить ровно одно (первое) вложение и подсчитывать их количество. Тогда можно показывать первое вложение сразу на вывод, и делать кнопарь "ещё 100500 вложений".

а можно... чёт фантазия разыгралась на ночь глядя... :)
...
Рейтинг: 0 / 0
25.11.2013, 22:29:10
    #38477373
Arhat109
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение вложений к комментариям
Arhat109,

Да, кстати забыл. "лучший способ" - сильно зависит от особенностей данных (в частности размер вложений и их количество к коментарию), их объема, объемности выборки и т.д. вплоть до количества мозгов у конкретного сервера и его нагрузки. :)
...
Рейтинг: 0 / 0
26.11.2013, 11:00:07
    #38477803
zironix
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение вложений к комментариям
Всем спасибо. Наверное буду использовать вариант с разбором дубликатов на сервере, просто думал что есть возможность получать от MySQL что-то типа:

комментарий
--вложение1
--вложение2

комментарий2
--вложение1

Одним запросом и в удобном для php виде, но видимо я слишком многого хочу.
...
Рейтинг: 0 / 0
27.11.2013, 03:09:43
    #38479215
MikkiMouse
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение вложений к комментариям
zironix,

можно и 1 запросом, но непонятно зачем???? Вот почему все хотят все 1-м запросом???
Ну построй нормальную базу, вылижи все отношения, построй индексы, потом 1-м запросом, зачем оно тебе 1-м запросом, если у тебя ни база, ни сервер не оптимизированы и этот 1 запрос у тебя всю базу уложит.
зачем объясни мне это 1 -м запросом,,,,,,,,,,,,,,,,,,,,????????????????????

Модератор: Да, эмоции лучше сдерживать. Или, по крайней мере, выражать их цензурно.
Пост поправлен. Если был искажен смысл - не обижайтесь, в следующий раз пишите сами так, чтобы не пришлось править.
...
Рейтинг: 0 / 0
27.11.2013, 08:33:35
    #38479278
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение вложений к комментариям
MikkiMouseВот почему все хотят все 1-м запросом???Шоб было за... ну вы поняли :)
...
Рейтинг: 0 / 0
27.11.2013, 14:47:59
    #38479966
zironix
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение вложений к комментариям
MikkiMousezironix,

можно и 1 запросом, но непонятно зачем???? Вот почему все хотят все 1-м запросом???
Ну построй нормальную базу, вылижи все отношения, построй индексы, потом 1-м запросом, зачем оно тебе 1-м запросом, если у тебя ни база, ни сервер не оптимизированы и этот 1 запрос у тебя всю базу уложит.
зачем объясни мне это 1 -м запросом,,,,,,,,,,,,,,,,,,,,????????????????????


Ну потому, что я не хочу долбить базу просто так количеством запросов, равным количеству комментариев и надеялся что есть какой-то оптимальный способ для данной задачи, который мне не известен, так что такая агрессия мне не понятна.
...
Рейтинг: 0 / 0
27.11.2013, 15:50:49
    #38480136
bochkov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение вложений к комментариям
Ну если не невтерпеж то можно сделать
Код: sql
1.
2.
3.
4.
SELECT id as id_comment,comment as label,0 as sort FROM comment
UNION
SELECT id_comment,content ,1 as sort FROM content
ORDER BY id_comment,sort
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Получение вложений к комментариям / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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