Tad, Большое спасибо!!
Этот топик читают: Гость
Ответов: 655
Рейтинг: 18
|
|||
карма: 0 |
|
Ответов: 16884
Рейтинг: 1239
|
|||
Делал что-то подобное. Справка, формирование запросов, данные - всё в таблицах БД SQLite.
Вот картинка варианта на русском нашлась. стоянка.png |
|||
карма: 25 |
| ||
файлы: 1 | стоянка.png [34.3KB] [1040] |
Ответов: 655
Рейтинг: 18
|
|||
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 |
|
Ответов: 16884
Рейтинг: 1239
|
|||
Gunnman писал(а): Как ускорить select count(*) from 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 |
|||
карма: 25 |
|
Ответов: 655
Рейтинг: 18
|
|||
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 |
|
Ответов: 16884
Рейтинг: 1239
|
|||
Gunnman писал(а): пробовал select * from orders JOIN users on user=name; Gunnman писал(а): name textGunnman писал(а): user integer |
|||
карма: 25 |
|
Ответов: 655
Рейтинг: 18
|
|||
Tad, туплю т.к. с базами работать только начал.
Условие user=name по моему мнению должно было мне вернуть вместо ID юзера его имя) про text и integer понял)) Я не могу понять как составить запрос чтобы при select * from orders мне выдавался не ID юзера записанный в стобце user а его имя из таблицы Users. Можно хоть небольшой пример? |
|||
карма: 0 |
|
Ответов: 16884
Рейтинг: 1239
|
|||
карма: 25 |
| ||
файлы: 1 | code_33911.txt [1.7KB] [453] |
Ответов: 655
Рейтинг: 18
|
|||
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 |
|
Ответов: 16884
Рейтинг: 1239
|
|||
Gunnman писал(а): почему... используются компоненты с вкладки "Data Source" а не с вкладки SQLite? Организация БД (примерно): В таблице ORDERS мы должны хранить id заказа,Номер заказа, id заказчика, дату заказа, дату выполнения заказа, содержание заказа. И заказу совсем по-барабану кто его исполнители. В таблице ЗАКАЗЧИКИ храним id заказчика, Ф.И.О., Адрес, Телефон и т.д. В таблице ПЕРСОНАЛ храним id исполнителя, Ф.И.О. и всё, что нужно. В таблице ИСПОЛНИТЕЛИ храним номер заказа, id исполнителя. |
|||
карма: 25 |
|
Гость
Ответов: 17029
Рейтинг: 0
|
|||
Редактировалось 4 раз(а), последний 2021-05-21 07:58:52 |
|||
карма: 0 |
|
Ответов: 952
Рейтинг: 4
|
|||
Как сделать выборку нескольких строк по одному параметру?
К примеру в БД есть номер заявки, не ID, просто номер. В таблицу мне надо выбрать несколько заявок, количество - неизвестно, меняется всё время. Выбирать заявки нужно по её номеру, не ID. На каждый номер потребуется 1 запрос или можно как-то втюхать всё в 1 общий запрос? Номера вводить планирую вручную либо выбором из выпадающего списка. |
|||
карма: 0 |
|
Ответов: 16884
Рейтинг: 1239
|
|||
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"); ) Вопрос: А зачем это нужно ? Цель какая ? |
|||
карма: 25 |
|
Ответов: 952
Рейтинг: 4
|
|||
Выбираю к примеру 8-10 номеров заявок. Их вываливает в таблицу.
По клику на записи вылезает всплывающее меню, выбираю 1 из нескольких пунктов этого меню, к каждому из пунктов привязано определенное действие с указанной записью БД, допустим Выполнено, Приостановлено, Передано в архив и т.д. После выбора и применения одного из этих пунктов таблицу я не очищаю, а просто перехожу мышкой к следующей записи и так же работаю с ней. На данный момент поиск делаю из дочерней формы, по одной заявке, работаю с ней, потом снова дочерняя и следующаяя заявка, ... муторно, не удобно. |
|||
карма: 0 |
|
Ответов: 16884
Рейтинг: 1239
|
|||
Ясно.
|
|||
карма: 25 |
|