Скрытая ирония?
Да я понимаю что БД у меня построена не то что криво а вабще неправильно.
Но пока ничего сделать не могу, точнее времени не хватает. Да и честно говоря боюсь кардинально перестраивать.
Тем более мне нужно будет тогда сконвертировать старую базу данных в новый видструктуру, а это вабще меня кошмарит, потому как даже не знаю как такое можно сделать ....
Этот топик читают: Гость
Ответов: 952
Рейтинг: 4
|
|||
карма: 0 |
|
Ответов: 16884
Рейтинг: 1239
|
|||
user_asm, никакой иронии.
Просто стала понятна цель. Если бы ты написал : Как организовать разноску признака Выполнено, Приостановлено, Передано в архив и т.д., было бы понятно с самого начала. user_asm писал(а): сконвертировать старую базу данных в новый видструктуруINSERT INTO <новая таблица> SELECT <перечисляешь колонки старой таблицы в том порядке, в котором они должны быть в новой таблице> From <старая таблица>; Тут проблема другая - необходимо будет перепахать всю свою программу, а это намного сложней. |
|||
карма: 25 |
|
Ответов: 952
Рейтинг: 4
|
|||
Программу уже начал потихоньку перепахивать. Затык со временем и усталостью. Думалка к вечеру уже начинает сбоить.
Сейчас у меня в БД 1 таблица, без всяких ID Жесть. Разработку начинал на основе примера SQLite Телефонная книга, а там не было разносок по таблицам, ну и теорию построения БД я не читал естественно. |
|||
карма: 0 |
|
Ответов: 655
Рейтинг: 18
|
|||
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 |
|
Ответов: 16884
Рейтинг: 1239
|
|||
Gunnman, не морочи себе .... голову.
Индексировать таблицу можно по любому полю или по списку полей. Просто нужно подумать и поэсперементировать. Выборка из таблицы с 803004 записями (Кадастр улиц РФ). Таблица не индексирова. Прогнал запрос : SELECT * FROM STREET WHERE substr(name,1,1)="П"; Запросом было отобрано 74484 строки. Затрачено времени: 1. Без вывода на экран: 5 секунд. 2. С выводом на экран : 28 секунд. Вопрос: Нахрена козе баян ? Сообщение на главной странице форума писал(а): Наши пользователи оставили сообщений: 235139Или у тебя будет за год заказов больше ? Реально подходи к решению любой задачи. (читай первую строку моего ответа) ------------ Дoбавленo в 11.58: Интересно, а сколько у тебя будет заказов в день ? |
|||
карма: 25 |
|
Ответов: 199
Рейтинг: 44
|
|||
Здравствуйте, помогите составить запрос к базе,
вычисляющий разницу между текущим, и предыдущим по индексу значением ячейки: |
|||
карма: 0 |
| ||
файлы: 1 | 223.png [12.1KB] [330] |
Ответов: 758
Рейтинг: 112
|
|||
vovs, code_33948.txt
|
|||
карма: 1 |
| ||
файлы: 1 | code_33948.txt [1.5KB] [384] | ||
Голосовали: | vovs |
Ответов: 655
Рейтинг: 18
|
|||
Всем привет!
Помогите пожалуйста с запросом к БД! Есть 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 |
|
Ответов: 16884
Рейтинг: 1239
|
|||
В settings первым запиши
INSERT INTO settings values(NULL,0); и у тебя никогда не будет пустых полей. |
|||
карма: 25 |
|
Ответов: 655
Рейтинг: 18
|
|||
Понял! Спс!
|
|||
карма: 0 |
|
Гость
Ответов: 17029
Рейтинг: 0
|
|||
Редактировалось 4 раз(а), последний 2021-05-21 07:58:53 |
|||
карма: 0 |
|
Ответов: 16884
Рейтинг: 1239
|
||||||||||||
77.106.199.176 писал(а): поля ID -первичный ключ, если вставляю NULL то он автоматом его заменяет на 1Насколько я понял: таблица Settings - это справочник скидок (в %) Записи в Settings: 1,0 2,5 3,10 4,15 Запись в Clients :
т.е. у Васи скидка=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 |
|
Ответов: 16884
Рейтинг: 1239
|
|||
Может кому-то и пригодится.
Запрос на получение даты Православной Пасхи в текущем году (по новому стилю.)
|
|||
карма: 25 |
|
Ответов: 655
Рейтинг: 18
|
|||
Подскажите пожалуйста как объеденить данные в запросе:
Таблица 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 |
|
Гость
Ответов: 17029
Рейтинг: 0
|
|||
Редактировалось 4 раз(а), последний 2021-05-21 07:58:54 |
|||
карма: 0 |
|