Обработка выборки из связанных таблиц

SQLite, Preferences, файлы, SD, Content Provider, XML, JSON
Ответить
dimich
Сообщения: 14
Зарегистрирован: 17 июл 2013, 16:13

Обработка выборки из связанных таблиц

Сообщение dimich » 01 авг 2013, 16:07

Есть выборка из БД из 2-х связанных таблиц.
Таблица №1 - Шапка таблица заказы (id_заказа, дата, id_клиента)
Таблица №2 - Список товарных позиций в заказе (таблицная часть заказа) - (_id, id_заказа, товар, количество цена)

Т.е. одной записи из таблицы №1 может соответсвовать несколько записей из таблицы №2 (условимся что их будет максимум 3 штуки на 1 запись таблицы №1).

После выполнения запроса у меня получается таблица с колонками:
_id, id_заказа, товар, количество, цена, дата, id_клиента

Надо сделать вывод данных в ListView через адаптер. Как эти данные "перетусовать" в вид:
id_заказа, дата, id_клиента, товар1, товар2, товар3, количество1, количество2, количество3, цена1, цена2, цена3
для вывода в ListView?

Аватара пользователя
KamiSempai
Сообщения: 1339
Зарегистрирован: 17 фев 2012, 21:23
Откуда: Мордор

Re: Обработка выборки из связанных таблиц

Сообщение KamiSempai » 01 авг 2013, 17:55

Нужно в адаптер передавать только 1 таблицу, а уже в bindView делать запрос к базе на получение списка товаров и заполнять строку более подробными данными.

Советую посмотреть в сторону ExpandableListView. Тогда можно будет выводить любое количество товаров по заказу.
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Обработка выборки из связанных таблиц

Сообщение Foenix » 01 авг 2013, 18:28

смысла так делать нет, или усложнять вид с помощью вью, о котором сказли выше, либо делать две страницы. На одной из них - список заказов, а при нажатии на строку - вторая страница со списком товаров из заказа.
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

dimich
Сообщения: 14
Зарегистрирован: 17 июл 2013, 16:13

Re: Обработка выборки из связанных таблиц

Сообщение dimich » 02 авг 2013, 10:22

Foenix писал(а):смысла так делать нет, или усложнять вид с помощью вью, о котором сказли выше, либо делать две страницы. На одной из них - список заказов, а при нажатии на строку - вторая страница со списком товаров из заказа.
Вот я и хочу "усложнить".
Как мне вывести в каждую строку ListView данные из таблицы №1 (шапка) и подтянуть соответствующие данные из таблицы №2 (пусть будет даже только первые 2 строки из таблицы №2).

Я так понимаю, надо сразу впихнуть это всё в курсор:
id_заказа(1), дата(1), id_клиента(1), товар1(2), товар2(2), кол-во1(2), кол-во2(2), цена1(2), цена2(2)
и как это сделать?
Вообще не нашел ни одного примера работы с подобной связкой - когда записи в связанных таблицах не 1 к 1, а N к 1 или N к M записям.

Изображение

Аватара пользователя
KamiSempai
Сообщения: 1339
Зарегистрирован: 17 фев 2012, 21:23
Откуда: Мордор

Re: Обработка выборки из связанных таблиц

Сообщение KamiSempai » 02 авг 2013, 11:25

dimich писал(а):Вот я и хочу "усложнить".
Как мне вывести в каждую строку ListView данные из таблицы №1 (шапка) и подтянуть соответствующие данные из таблицы №2 (пусть будет даже только первые 2 строки из таблицы №2).
Для кого я в предыдущем посте распинался?
KamiSempai писал(а):Нужно в адаптер передавать только 1 таблицу, а уже в bindView делать запрос к базе на получение списка товаров и заполнять строку более подробными данными.
dimich писал(а):Я так понимаю, надо сразу впихнуть это всё в курсор:
id_заказа(1), дата(1), id_клиента(1), товар1(2), товар2(2), кол-во1(2), кол-во2(2), цена1(2), цена2(2)
и как это сделать?
Вообще не нашел ни одного примера работы с подобной связкой - когда записи в связанных таблицах не 1 к 1, а N к 1 или N к M записям.
Ни чего впихивать не нужно. Еще раз намекаю на выборку внутри bindView или getView.
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.

dimich
Сообщения: 14
Зарегистрирован: 17 июл 2013, 16:13

Re: Обработка выборки из связанных таблиц

Сообщение dimich » 02 авг 2013, 11:40

для зеленого новичка...
уже копаю

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Обработка выборки из связанных таблиц

Сообщение Foenix » 02 авг 2013, 12:43

"Неправильный, ты, дядя Федор, бутерброд ешь" (С)
(неправильную ты выбрал программу для подражания)
Я так понимаю, надо сразу впихнуть это всё в курсор:
id_заказа(1), дата(1), id_клиента(1), товар1(2), товар2(2), кол-во1(2), кол-во2(2), цена1(2), цена2(2)
и как это сделать?
Вообще не нашел ни одного примера работы с подобной связкой - когда записи в связанных таблицах не 1 к 1, а N к 1 или N к M записям.
1. Нельзя в курсор впихнуть такие разносортные данные.
2. Выборка из связанных таблиц 1-ко-многим - это обычное дело в базах данных, а вот многие-ко-многим это уже неправильная архитектура. Непослушал ты меня насчет планирования..

3. Для того, чтоб к каждой строке подтянуть данные из таблицы 2 нужно делать запрос, предварительно получив id записи из таблицы 1 (допустим id1)

Код: Выделить всё

select table2.* from table2 where table2.id = id1
быстрее и проще было бы это сделать на второй активити, передав ей по интенту этот id. И даже адаптеров можно было бы не делать никаких. Все бы уже работало.

Можно сделать еще лучше. Просто составить список из всех заказов

Код: Выделить всё

select table1.*, table2.* from table2 left outer join table1. on tabel2.id = table1.id_zakaza
а затем из этого наколдовать список с разделителями (что я себе вчера сделала, получилось красиво)
Вот по типу такого
Изображение
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Аватара пользователя
KamiSempai
Сообщения: 1339
Зарегистрирован: 17 фев 2012, 21:23
Откуда: Мордор

Re: Обработка выборки из связанных таблиц

Сообщение KamiSempai » 02 авг 2013, 14:12

Foenix, все зависит от целей.
Возможно перед человеком поставили задачу сделать превью части товаров по заказу, а по клику выводить их полный перечень.
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.

dimich
Сообщения: 14
Зарегистрирован: 17 июл 2013, 16:13

Re: Обработка выборки из связанных таблиц

Сообщение dimich » 02 авг 2013, 14:18

Блин... select table1.*, table2.* from table2 left outer join table1. on tabel2.id = table1.id_zakaza - у меня было тоже самое только через.... ну в общем вернулся к тому же откуда и начал....
[syntax=java]// данные для таблицы orders (таблица1)
int[] order_id = { 1, 2, 3, 4 };
String[] data = { "01.02.2013", "25.07.2013", "31.07.2013", "16.06.2013" };
int[] client_id = { 2, 3, 6, 1 };

// данные для таблицы details (таблица 2)
int[] order_numid = { 2, 2, 1, 3 };
String[] good = { "Карандаш", "Кросовки", "Губка", "Стол" };
.......
String sqlQuery = "select orders.*, details.* "
+ "from details "
+ "left outer join orders "
+ "on details.order_numid = orders._id"
+ "";
[/syntax]

Код: Выделить всё

08-02 11:09:26.958: DEBUG/myLogs(557): _id = 1; data = 25.07.2013; client_id = 3; _id = 1; good = Карандаш; order_numid = 2; 
08-02 11:09:26.959: DEBUG/myLogs(557): _id = 2; data = 25.07.2013; client_id = 3; _id = 2; good = Кросовки; order_numid = 2; 
08-02 11:09:27.021: DEBUG/myLogs(557): _id = 3; data = 01.02.2013; client_id = 2; _id = 3; good = Губка; order_numid = 1; 
08-02 11:09:27.034: DEBUG/myLogs(557): _id = 4; data = 31.07.2013; client_id = 6; _id = 4; good = Стол; order_numid = 3; 
зайдем с другого конца: на скриншоте список сделаный с помощью ExpandableListView?
UPD Попробую с ExpandableListView. Видимо, все-таки, правильно меня пнули туда сразу...

dimich
Сообщения: 14
Зарегистрирован: 17 июл 2013, 16:13

Re: Обработка выборки из связанных таблиц

Сообщение dimich » 02 авг 2013, 15:12

Как сделать чтобы ExpandableListView показывался развернутым при загрузке?

Аватара пользователя
KamiSempai
Сообщения: 1339
Зарегистрирован: 17 фев 2012, 21:23
Откуда: Мордор

Re: Обработка выборки из связанных таблиц

Сообщение KamiSempai » 02 авг 2013, 15:37

dimich писал(а):Как сделать чтобы ExpandableListView показывался развернутым при загрузке?
Только так http://stackoverflow.com/questions/6873 ... -list-view

На самом деле, если хорошенько поискать, можно найти кучу библиотек которые еще лучше подойдут для этого.
Вот, например, одна: https://github.com/emilsjolander/StickyListHeaders
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Обработка выборки из связанных таблиц

Сообщение Foenix » 02 авг 2013, 15:41

неа, на скрине список с заголовками (разделителями, sections).
Делается просто (но он не сворачивается)
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

dimich
Сообщения: 14
Зарегистрирован: 17 июл 2013, 16:13

Re: Обработка выборки из связанных таблиц

Сообщение dimich » 02 авг 2013, 16:03

KamiSempai писал(а):Foenix, все зависит от целей.
Возможно перед человеком поставили задачу сделать превью части товаров по заказу, а по клику выводить их полный перечень.
в точку.

П.С. Пошел переваривать полученную информацию. Спасибо за участие.
Не прощаюсь :)

Ответить