Есть таблица статей со структурой:
id - ID
text - Текст статьи
user_id - ID пользователя добавивиший статью
created - дата создания в формате Y-m-d H:i:s
Данные в таблице:
id | text | user_id | created
----------------------------------------------
1 | Text 1 | 1 | 2000-01-01 00:00:01
2 | Text 2 | 2 | 2000-01-01 00:00:02
3 | Text 3 | 3 | 2000-01-01 00:00:03
и таблица комментарий к статьям со структурой:
id - ID
text - Текст комментария
article_id - ID статьи
user_id - ID пользователя добавивиший комментарий
created - дата создания в формате Y-m-d H:i:s
Данные в таблице:
id | text | article_id | user_id | created
--------------------------------------------------------------
1 | Comment 1.1 | 1 | 1 | 2000-01-01 00:00:01
2 | Comment 2.1 | 2 | 2 | 2000-01-01 00:00:02
3 | Comment 3.1 | 3 | 3 | 2000-01-01 00:00:03
4 | Comment 1.2 | 1 | 1 | 2000-01-01 00:00:01
5 | Comment 2.2 | 2 | 2 | 2000-01-01 00:00:02
6 | Comment 3.3 | 3 | 3 | 2000-01-01 00:00:03
7 | Comment 1.3 | 1 | 1 | 2000-01-01 00:00:01
8 | Comment 2.3 | 2 | 2 | 2000-01-01 00:00:02
9 | Comment 3.3 | 3 | 3 | 2000-01-01 00:00:03
LEFT JOIN
запросом получаю результат
a_id | a_text | comment_text | created
-------------------------------------------------------------
1 | Text 1 | Comment 1.1 | 2000-01-01 00:00:01
2 | Text 1 | Comment 1.2 | 2000-01-01 00:00:02
3 | Text 1 | Comment 1.3 | 2000-01-01 00:00:03
4 | Text 2 | Comment 2.1 | 2000-01-01 00:00:01
5 | Text 2 | Comment 2.2 | 2000-01-01 00:00:02
6 | Text 2 | Comment 2.3 | 2000-01-01 00:00:03
7 | Text 3 | Comment 3.1 | 2000-01-01 00:00:01
8 | Text 3 | Comment 3.2 | 2000-01-01 00:00:02
9 | Text 3 | Comment 3.3 | 2000-01-01 00:00:03
Как этот результат представить в виде Map < Artice, List <Comment> > ?
Грубо говоря, получится что-то вроде этого:
ResultSet rs = statement.execute();
Map<Article, List<Comment>> map = new HashMap<Article, List<Comment>>();
while (rs.hasNext()) {
Article a = new Article(rs.getString("a_text"));
List<Comment> comments = map.get(a);
if (comments == null) {
comments = new LinkedList<Comment>();
map.put(a, comment);
}
Comment c = new Comment(rs.getString("comment_text"));
comments.add(c);
}
Обязательно, чтобы в классе Article
был реализован метод equals
, желательно, чтобы ещё был реализован метод hashCode
, вычисляющий хэш объекта по тексту. Для упрощения сравнения статей лучше в выборку добавить id статьи и записывать его в объект при создании. Тогда сравнивать можно будет только по id.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
В случае, если одновременно этот запрос выполнится под 20 людьми, счётчик не залагает? Например вместо 20, запишет 21 или вообще 18?