Вверх ↑
Этот топик читают: Гость
Ответов: 655
Рейтинг: 18
#1246: 2014-06-27 19:11:45 ЛС | профиль | цитата
Tad, Большое спасибо!!
карма: 0

0
Ответов: 16884
Рейтинг: 1238
#1247: 2014-06-27 21:23:25 ЛС | профиль | цитата
Делал что-то подобное. Справка, формирование запросов, данные - всё в таблицах БД SQLite.
Вот картинка варианта на русском нашлась.
стоянка.png

карма: 24
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
файлы: 1стоянка.png [34.3KB] [576]
Ответов: 655
Рейтинг: 18
#1248: 2014-06-28 00:13:25 ЛС | профиль | цитата
Tad, если не сложно не подскажите по паре моментов?

Я сделал тестовую таблицу:
create table test (id interger primary key autoincriment, data1 text, time real);
создал индекс для столбца data.
create index dt on test (data);

загнал в таблицу 1 000 000 строк.

если я делаю например select * from test where data='123'; то бд быстро выдает результат.
а если делаю select count(*) from test; - есть задержка в пару секунд.

В связи с чем есть пару вопросов:

1) Как ускорить select count(*) from test;?
Если вместо select count(*) from test; использовать select max(id) from test (который в разы быстрее в моем случае) как тогда быть если я удалю какую либо строку из таблицы? индекс -то не удалится..

2) Зачем нужен primary key если можно использовать index unique? (описание primary key на wiki для начинающего оч сложное)

3) Индексировать нужно всю таблицу или же только столбцы по которым будет производиться выборка?
карма: 0

0
Ответов: 16884
Рейтинг: 1238
#1249: 2014-06-28 12:29:38 ЛС | профиль | цитата
Gunnman писал(а):
Как ускорить select count(*) from test;?
Попробуй SELECT seq FROM sqlite_sequence WHERE name='test';
Gunnman писал(а):
Индексировать нужно всю таблицу или же только столбцы по которым будет производиться выборка?
только столбцы по которым будет производиться выборка.
Насчет index unique (вернее CREATE UNIQUE INDEX index_name on table_name (column_name);)
Уникальный индекс не допускает никаких повторяющихся значений при добавлении записи в таблицу.

Очень хорошая справка по SQLite http://www.tutorialspoint.com/sqlite/index.htm
и не только http://www.tutorialspoint.com/#tutorials_library
карма: 24
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 655
Рейтинг: 18
#1250: 2014-06-29 00:12:27 ЛС | профиль | цитата
Tad, еще раз спасибо! Мануалы хорошие!

Но в документации по Foreign key пример не понятен..

Создаю таблицу users

pragma foreign keys=ON;

create users (id integer primary key autoincrement, name text);

Создаю таблицу orders (id integer primary key autoincrement, user integer, foreign key(user) references users(id));

делаю инсерты

insert into users values (NULL, 'Vasya');
insert into users values (NULL, 'Petya');

insert into orders values (NULL, 2);
insert into orders values (NULL, 1);

select * from orders;
1;2
2;1

Как построить запрос к таблице orders чтобы в результате получить "1;Petya" вместо "1;2" пробовал select * from orders JOIN users on user=name; в ответ ни чего.



карма: 0

0
Ответов: 16884
Рейтинг: 1238
#1251: 2014-06-29 11:05:55 ЛС | профиль | цитата
Gunnman писал(а):
пробовал select * from orders JOIN users on user=name;
А это что за условие user=name ?
Gunnman писал(а):
name text
Gunnman писал(а):
user integer


карма: 24
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 655
Рейтинг: 18
#1252: 2014-06-29 18:17:13 ЛС | профиль | цитата
Tad, туплю т.к. с базами работать только начал.


Условие user=name по моему мнению должно было мне вернуть вместо ID юзера его имя) про text и integer понял))

Я не могу понять как составить запрос чтобы при select * from orders мне выдавался не ID юзера записанный в стобце user а его имя из таблицы Users.

Можно хоть небольшой пример?
карма: 0

0
Ответов: 16884
Рейтинг: 1238
#1253: 2014-06-29 23:36:41 ЛС | профиль | цитата
А самостоятельно? http://www.sqlite.org/foreignkeys.html
code_33911.txt

карма: 24
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
файлы: 1code_33911.txt [1.7KB] [292]
Ответов: 655
Рейтинг: 18
#1254: 2014-06-30 05:35:44 ЛС | профиль | цитата
Tad, все, разобрался! Спасибо!

А почему в Вашем примере используются компоненты с вкладки "Data Source" а не с вкладки SQLite?

Эти компоненты быстрее, надежней, (что-то другое)? П.с. пока для себя отметил применение onQuery и onExec...
------------ Дoбавленo в 05.35:
Tad,
Не поделитесь еще опытом с младшим поколением?)) Гугл тут точно бесполезен, я не смог найти даже приблизительной темы:

Допустим в таблице orders мы храним id заказа и id пользователя выполнившего данный заказ. А что если пользователь выполняющий заказ не один?
например доставку пианино заказ (idorders) 1234 выполняли Петр и Василий (iduser 1) и (iduser 2)?
в integer поле их уже не запишешь через разделитель..
использовать поле text? чтобы их записать туда через разделитель какой-нить например 1;2..
тогда назревает следующий вопрос(точнее он скорее первый) как связывать таблицы orders и users в данном случае?
пока я вижу только вариант такой:

сделать select по заказу...получить ID юзеров сделать что-то вроде:

select orders.orderid,user.username from orders, user join user where orderid=1234 and userid=1;
select orders.orderid,user.username from orders, user join user where orderid=1234 and userid=2;

Но чую что это велосипед с 3 педалями и без седла...


карма: 0

0
Ответов: 16884
Рейтинг: 1238
#1255: 2014-06-30 09:28:23 ЛС | профиль | цитата
Gunnman писал(а):
почему... используются компоненты с вкладки "Data Source" а не с вкладки SQLite?
Просто демо-схемы получаются чище. Я применяю компоненты с DataSource тогда, когда не нужно подключать свои какие-то функции.
Организация БД (примерно):
В таблице ORDERS мы должны хранить id заказа,Номер заказа, id заказчика, дату заказа, дату выполнения заказа, содержание заказа. И заказу совсем по-барабану кто его исполнители.
В таблице ЗАКАЗЧИКИ храним id заказчика, Ф.И.О., Адрес, Телефон и т.д.
В таблице ПЕРСОНАЛ храним id исполнителя, Ф.И.О. и всё, что нужно.
В таблице ИСПОЛНИТЕЛИ храним номер заказа, id исполнителя.
карма: 24
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Гость
Ответов: 17029
Рейтинг: 0
#1256: 2014-06-30 10:31:18 правка | ЛС | профиль | цитата


Редактировалось 4 раз(а), последний 2021-05-21 07:58:52
карма: 0

0
Ответов: 948
Рейтинг: 4
#1257: 2014-07-01 11:10:23 ЛС | профиль | цитата
Как сделать выборку нескольких строк по одному параметру?
К примеру в БД есть номер заявки, не ID, просто номер.
В таблицу мне надо выбрать несколько заявок, количество - неизвестно, меняется всё время. Выбирать заявки нужно по её номеру, не ID.
На каждый номер потребуется 1 запрос или можно как-то втюхать всё в 1 общий запрос?
Номера вводить планирую вручную либо выбором из выпадающего списка.
карма: 0

0
Ответов: 16884
Рейтинг: 1238
#1258: 2014-07-01 13:10:47 ЛС | профиль | цитата
user_asm, море вариантов
1. SELECT * FROM zajavka WHERE номер=1212 OR номер=2212 OR номер=3333;
2. SELECT * FROM zajavka WHERE номер IN (1212,2212,3333);
Если номер TEXT, то значения должны быть в кавычках ( WHERE номер IN ("1212","2212","3333"); )

Вопрос: А зачем это нужно ? Цель какая ?
карма: 24
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 948
Рейтинг: 4
#1259: 2014-07-02 09:53:32 ЛС | профиль | цитата
Выбираю к примеру 8-10 номеров заявок. Их вываливает в таблицу.
По клику на записи вылезает всплывающее меню, выбираю 1 из нескольких пунктов этого меню, к каждому из пунктов привязано определенное действие с указанной записью БД, допустим Выполнено, Приостановлено, Передано в архив и т.д.
После выбора и применения одного из этих пунктов таблицу я не очищаю, а просто перехожу мышкой к следующей записи и так же работаю с ней.
На данный момент поиск делаю из дочерней формы, по одной заявке, работаю с ней, потом снова дочерняя и следующаяя заявка, ... муторно, не удобно.
карма: 0

0
Ответов: 16884
Рейтинг: 1238
#1260: 2014-07-02 10:43:48 ЛС | профиль | цитата
Ясно.

карма: 24
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)