Вверх ↑
Этот топик читают: Гость
Ответов: 952
Рейтинг: 4
#1261: 2014-07-02 11:43:02 ЛС | профиль | цитата
Скрытая ирония?
Да я понимаю что БД у меня построена не то что криво а вабще неправильно.
Но пока ничего сделать не могу, точнее времени не хватает. Да и честно говоря боюсь кардинально перестраивать.
Тем более мне нужно будет тогда сконвертировать старую базу данных в новый видструктуру, а это вабще меня кошмарит, потому как даже не знаю как такое можно сделать ....
карма: 0

0
Ответов: 16884
Рейтинг: 1239
#1262: 2014-07-02 12:09:22 ЛС | профиль | цитата
user_asm, никакой иронии.
Просто стала понятна цель.
Если бы ты написал : Как организовать разноску признака Выполнено, Приостановлено, Передано в архив и т.д., было бы понятно с самого начала.
user_asm писал(а):
сконвертировать старую базу данных в новый видструктуру
Нет ничего проще.
INSERT INTO <новая таблица> SELECT <перечисляешь колонки старой таблицы в том порядке, в котором они должны быть в новой таблице> From <старая таблица>;
Тут проблема другая - необходимо будет перепахать всю свою программу, а это намного сложней.
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 952
Рейтинг: 4
#1263: 2014-07-02 12:37:26 ЛС | профиль | цитата
Программу уже начал потихоньку перепахивать. Затык со временем и усталостью. Думалка к вечеру уже начинает сбоить.
Сейчас у меня в БД 1 таблица, без всяких ID Жесть.
Разработку начинал на основе примера SQLite Телефонная книга, а там не было разносок по таблицам, ну и теорию построения БД я не читал естественно.
карма: 0

0
Ответов: 655
Рейтинг: 18
#1264: 2014-07-03 02:21:26 ЛС | профиль | цитата
Tad, хочу посоветоваться с Вами.

По вашей рекомендации отделил таблицу orders от исполнителей.
Теперь есть 3 таблицы users, orders, job, последняя имеет внешние ключи для связи с таблицами orders и users.

Таблица orders:

id
service -заказ
price1 -сумма заказа
price2 -сумма пердоплаты
cash - тип оплаты
dt1 -время создания заказа
dt2 -вермя завершения заказа
status -стату выполнения

Вопрос по индексам:

Если я создам индекс например create index newIndx on orders(price1, status);
То при запросе select * from orders where price1>500 and status>1 то сначало найдутся все заказы где цена>500 и потом уже в найденом будет искать те заказы статус которых>1?
А если я создам index newIndx1 on orders(price1); и index newIndx2 on orders(status); то при запросе приведенном выше таблица будет перелопачиваться Sqlite'ом 2 раза? т.е. мы тут не повышаем производительность а наоборот?

(про моих баранов)
Селекты по таблице orders в 99% случаев планируется делать по столбцам id, cash, status и по диапазону дат dt1 и dt2.
status и cash можно быстро получить по id который integer primary key,но будут и запросы для диапазона дат по которым нужно будет получать теже самые status и cash.

create index order_index on orders(cash,status,dt1,dt2); - такой вариант приемлим? или можно красивше\практичнее??







карма: 0

0
Ответов: 16884
Рейтинг: 1239
#1265: 2014-07-03 11:58:01 ЛС | профиль | цитата
Gunnman, не морочи себе .... голову.
Индексировать таблицу можно по любому полю или по списку полей. Просто нужно подумать и поэсперементировать.
Выборка из таблицы с 803004 записями (Кадастр улиц РФ). Таблица не индексирова.
Прогнал запрос : SELECT * FROM STREET WHERE substr(name,1,1)="П";
Запросом было отобрано 74484 строки.
Затрачено времени:
1. Без вывода на экран: 5 секунд.
2. С выводом на экран : 28 секунд.
Вопрос: Нахрена козе баян ?
Сообщение на главной странице форума писал(а):
Наши пользователи оставили сообщений: 235139
Это за сколько лет существования форума ? Не знаешь ?
Или у тебя будет за год заказов больше ?
Реально подходи к решению любой задачи. (читай первую строку моего ответа)
------------ Дoбавленo в 11.58:
Интересно, а сколько у тебя будет заказов в день ?
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 199
Рейтинг: 44
#1266: 2014-07-07 10:20:58 ЛС | профиль | цитата
Здравствуйте, помогите составить запрос к базе,
вычисляющий разницу между текущим, и предыдущим по индексу значением ячейки:


карма: 0

0
файлы: 1223.png [12.1KB] [330]
Ответов: 758
Рейтинг: 112
#1267: 2014-07-07 10:55:37 ЛС | профиль | цитата
vovs, code_33948.txt
карма: 1

1
файлы: 1code_33948.txt [1.5KB] [384]
Голосовали:vovs
Ответов: 655
Рейтинг: 18
#1268: 2014-07-29 01:36:16 ЛС | профиль | цитата
Всем привет!

Помогите пожалуйста с запросом к БД!

Есть 3 таблицы:

Clients
-------
id integer
name text
discount int (связь с settings.id)
type int (связь с cdata.id)

Cdata
-------
id integer
balance int
name text

Settings
-------
id integer
skidka integer

Собственно результат запроса должен отображать:
имя клиента (clients.name), если поле discount>0 то отобразить скидку для этого клиента (settings.skidka) else '0', если type>0 отобразить баланс и имя (cdata.balance)(cdata.name) else 0.

3й день мучаю Sqlite case'ом и join'ом результаты удручают, помогите плз, оч нужно!

Пробую так:

select name,discount, case when discount>0 then (select skidka from settings where discount=settings.id) else '0' end from clients where clients='Vasya'; но мне кажется что запрос не правильный, плюс не могу понять как сюда прикрутить запрос по балансу и имени организации.
------------ Дoбавленo в 01.36:
Нашел частичное решение!

нужно было использовать left join!

select clients.name, clients.discount,clients.type, settings.skidka, cdata.balance, cdata.name from clients left join settings on discount=settings.id left join cdata on type=cdata.id;

Выводит все нужные данные правильно, осталось сделать чтобы на пустые поля выдавал 0, как реализовать подскажите плз?
карма: 0

0
Ответов: 16884
Рейтинг: 1239
#1269: 2014-07-29 16:17:43 ЛС | профиль | цитата
В settings первым запиши
INSERT INTO settings values(NULL,0);
и у тебя никогда не будет пустых полей.

карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 655
Рейтинг: 18
#1270: 2014-07-30 01:35:53 ЛС | профиль | цитата
Понял! Спс!
карма: 0

0
Гость
Ответов: 17029
Рейтинг: 0
#1271: 2014-07-30 04:42:31 правка | ЛС | профиль | цитата


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

0
Ответов: 16884
Рейтинг: 1239
#1272: 2014-07-30 10:42:04 ЛС | профиль | цитата
77.106.199.176 писал(а):
поля ID -первичный ключ, если вставляю NULL то он автоматом его заменяет на 1
Всё правильно, и не надо никаких Update.

Насколько я понял: таблица Settings - это справочник скидок (в %)
Записи в Settings:
1,0
2,5
3,10
4,15
Запись в Clients :
idnamediscounttype
11Вася11
12Петя32

т.е. у Васи скидка=1 , т.е. по таблице скидок это 0
а у Пети скидка=3, по таблице скидок это 10
------------ Дoбавленo в 10.42:
Что тебе даёт запись в Clients id из discount ? - ничего, кроме головной боли.
1. скидка не может быть >100%
2. это 1 байт
3. значение скидки можно писать прямо в Clients, а таблицу Settings применять только для заполнения ComboBox выбора скидки.
Или забить скидки в ComboBox "намертво", а таблицу Settings в мусор.

Для поля Type нужно писать Cdata.id т.к. у таблицы Cdata несколько полей.

карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 16884
Рейтинг: 1239
#1273: 2014-08-28 10:35:29 ЛС | профиль | цитата
Может кому-то и пригодится.
Запрос на получение даты Православной Пасхи в текущем году (по новому стилю.)

SELECT Data||Month FROM 
( SELECT CASE WHEN (c>=10) THEN
case WHEN (c+4)<31 THEN (c+4) ELSE (c-26) end
else c+4 end AS Data,
CASE WHEN (c>=10) THEN
case WHEN (c+4)<31 THEN " апреля" ELSE " мая" end
else " апреля" end AS Month
FROM
(SELECT a+b AS c FROM
(SELECT (19*(Y % 19)+15) % 30 AS a, (2*(Y % 4)+4*(Y % 7)+6*((19*(Y % 19)+15) % 30)+6) % 7 AS b
FROM
(SELECT strftime('%Y','now','LocalTime') AS Y))));

карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 655
Рейтинг: 18
#1274: 2014-09-01 02:12:23 ЛС | профиль | цитата
Подскажите пожалуйста как объеденить данные в запросе:

Таблица worker - id и имя юзеров
таблица orders - id и информация по заказу
таблица job - содержит доп информацию к заказу (какие workers выполняли данный заказ)

Запрос:
select orders.id, orders.status, orders.date, orders.services, workers.name from orders,job left join workers on job.user=workers.id where orders.id=job.num and orders.status<=1;

Результат запроса:
1;1;2014-06-12;1x1,2x2;Вася
1;1;2014-06-12;1x1,2x2;Петя
2;1;2014-07-12;4x1,4x2;Игорь

У Васи и Пети был 1 заказ с ID 1 который они выполняли в двоем. Что нужно добавить в запрос чтобы результат получился в виде:
1;1;2014-06-12;1x1,2x2;Вася;Петя
2;1;2014-07-12;1x1,2x2;Игорь



------------ Дoбавленo в 02.12:
Такое вобще возможно?)
карма: 0

0
Гость
Ответов: 17029
Рейтинг: 0
#1275: 2014-09-01 18:16:46 правка | ЛС | профиль | цитата


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

0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)