Обработка выборки из связанных таблиц
Обработка выборки из связанных таблиц
Есть выборка из БД из 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?
Таблица №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: Обработка выборки из связанных таблиц
Нужно в адаптер передавать только 1 таблицу, а уже в bindView делать запрос к базе на получение списка товаров и заполнять строку более подробными данными.
Советую посмотреть в сторону ExpandableListView. Тогда можно будет выводить любое количество товаров по заказу.
Советую посмотреть в сторону ExpandableListView. Тогда можно будет выводить любое количество товаров по заказу.
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.
Хватит таскать макулатуру на тренировку! Используй T Note.
Re: Обработка выборки из связанных таблиц
смысла так делать нет, или усложнять вид с помощью вью, о котором сказли выше, либо делать две страницы. На одной из них - список заказов, а при нажатии на строку - вторая страница со списком товаров из заказа.
R.id.team
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
Re: Обработка выборки из связанных таблиц
Вот я и хочу "усложнить".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: Обработка выборки из связанных таблиц
Для кого я в предыдущем посте распинался?dimich писал(а):Вот я и хочу "усложнить".
Как мне вывести в каждую строку ListView данные из таблицы №1 (шапка) и подтянуть соответствующие данные из таблицы №2 (пусть будет даже только первые 2 строки из таблицы №2).
KamiSempai писал(а):Нужно в адаптер передавать только 1 таблицу, а уже в bindView делать запрос к базе на получение списка товаров и заполнять строку более подробными данными.
Ни чего впихивать не нужно. Еще раз намекаю на выборку внутри bindView или getView.dimich писал(а):Я так понимаю, надо сразу впихнуть это всё в курсор:
id_заказа(1), дата(1), id_клиента(1), товар1(2), товар2(2), кол-во1(2), кол-во2(2), цена1(2), цена2(2)
и как это сделать?
Вообще не нашел ни одного примера работы с подобной связкой - когда записи в связанных таблицах не 1 к 1, а N к 1 или N к M записям.
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.
Хватит таскать макулатуру на тренировку! Используй T Note.
Re: Обработка выборки из связанных таблиц
для зеленого новичка...
уже копаю
уже копаю
Re: Обработка выборки из связанных таблиц
"Неправильный, ты, дядя Федор, бутерброд ешь" (С)
(неправильную ты выбрал программу для подражания)
2. Выборка из связанных таблиц 1-ко-многим - это обычное дело в базах данных, а вот многие-ко-многим это уже неправильная архитектура. Непослушал ты меня насчет планирования..
3. Для того, чтоб к каждой строке подтянуть данные из таблицы 2 нужно делать запрос, предварительно получив id записи из таблицы 1 (допустим id1)
быстрее и проще было бы это сделать на второй активити, передав ей по интенту этот id. И даже адаптеров можно было бы не делать никаких. Все бы уже работало.
Можно сделать еще лучше. Просто составить список из всех заказов
а затем из этого наколдовать список с разделителями (что я себе вчера сделала, получилось красиво)
Вот по типу такого
(неправильную ты выбрал программу для подражания)
1. Нельзя в курсор впихнуть такие разносортные данные.Я так понимаю, надо сразу впихнуть это всё в курсор:
id_заказа(1), дата(1), id_клиента(1), товар1(2), товар2(2), кол-во1(2), кол-во2(2), цена1(2), цена2(2)
и как это сделать?
Вообще не нашел ни одного примера работы с подобной связкой - когда записи в связанных таблицах не 1 к 1, а N к 1 или N к M записям.
2. Выборка из связанных таблиц 1-ко-многим - это обычное дело в базах данных, а вот многие-ко-многим это уже неправильная архитектура. Непослушал ты меня насчет планирования..
3. Для того, чтоб к каждой строке подтянуть данные из таблицы 2 нужно делать запрос, предварительно получив id записи из таблицы 1 (допустим id1)
Код: Выделить всё
select table2.* from table2 where table2.id = id1
Можно сделать еще лучше. Просто составить список из всех заказов
Код: Выделить всё
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
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
- KamiSempai
- Сообщения: 1339
- Зарегистрирован: 17 фев 2012, 21:23
- Откуда: Мордор
Re: Обработка выборки из связанных таблиц
Foenix, все зависит от целей.
Возможно перед человеком поставили задачу сделать превью части товаров по заказу, а по клику выводить их полный перечень.
Возможно перед человеком поставили задачу сделать превью части товаров по заказу, а по клику выводить их полный перечень.
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.
Хватит таскать макулатуру на тренировку! Используй T Note.
Re: Обработка выборки из связанных таблиц
Блин... 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]
зайдем с другого конца: на скриншоте список сделаный с помощью ExpandableListView?
UPD Попробую с ExpandableListView. Видимо, все-таки, правильно меня пнули туда сразу...
[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;
UPD Попробую с ExpandableListView. Видимо, все-таки, правильно меня пнули туда сразу...
Re: Обработка выборки из связанных таблиц
Как сделать чтобы ExpandableListView показывался развернутым при загрузке?
- KamiSempai
- Сообщения: 1339
- Зарегистрирован: 17 фев 2012, 21:23
- Откуда: Мордор
Re: Обработка выборки из связанных таблиц
Только так http://stackoverflow.com/questions/6873 ... -list-viewdimich писал(а):Как сделать чтобы ExpandableListView показывался развернутым при загрузке?
На самом деле, если хорошенько поискать, можно найти кучу библиотек которые еще лучше подойдут для этого.
Вот, например, одна: https://github.com/emilsjolander/StickyListHeaders
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.
Хватит таскать макулатуру на тренировку! Используй T Note.
Re: Обработка выборки из связанных таблиц
неа, на скрине список с заголовками (разделителями, sections).
Делается просто (но он не сворачивается)
Делается просто (но он не сворачивается)
R.id.team
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
Re: Обработка выборки из связанных таблиц
в точку.KamiSempai писал(а):Foenix, все зависит от целей.
Возможно перед человеком поставили задачу сделать превью части товаров по заказу, а по клику выводить их полный перечень.
П.С. Пошел переваривать полученную информацию. Спасибо за участие.
Не прощаюсь