Вверх ↑
Этот топик читают: Гость
Ответов: 16884
Рейтинг: 1239
#46: 2013-09-12 23:05:11 ЛС | профиль | цитата
Chipset, В моей БД нет таких полей.
Вот тебе генератор БД. Запускаешь, вводишь число записей и жмешь кнопку и имеешь тестовую БД.
createbd.rar
Если хочешь на 1 000 000 записей, то запускай и ложись спать. Может к утру будет готова.
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
файлы: 1createbd.rar [1.2KB] [122]
Ответов: 186
Рейтинг: 9
#47: 2013-09-13 05:01:09 ЛС | профиль | цитата
Tad писал(а):
createbd.rar

За инструмент спасибо. Веселая схема

Tad писал(а):
Если хочешь на 1 000 000 записей, то запускай и ложись спать. Может к утру будет готова.

У меня в системники 6 вентиляторов, так что спать с этим самолетом под ухом не вариант

hitman249, тогда ты проверь, работает мое творение?
На моей БД из 4 строк, работает.
карма: 0

0
Ответов: 1528
Рейтинг: 57
#48: 2013-09-13 07:34:08 ЛС | профиль | цитата
Chipset писал(а):
hitman249, тогда ты проверь, работает мое творение?

м, работает кажется, взял на заметку
------------ Дoбавленo в 07.34:
Tad, на мой взгляд очень плохо держать разнородные данные в одной таблице.
в будущем аикнется инфа 146%
карма: 0

0
Ответов: 16884
Рейтинг: 1239
#49: 2013-09-13 12:59:38 ЛС | профиль | цитата
hitman249 писал(а):
очень плохо держать разнородные данные в одной таблице
А я где-то это предлагал ?
------------ Дoбавленo в 11.41:
Пока я только увидел
1. У тебя есть таблица "Список объектов"
2. И эту табличку, которую ты выложил здесь.
Вот эта табличка спроектирована неверно. ИМХО.
Ей больше бы подошла структура:
или такая (с маленьким гемором)

CREATE TABLE rules_month(
id integer primary key,
object_id integer,
month_num integer,
month_year integer,
month_days TEXT DEFAULT '0000000000000000000000000000000');
или такая(тоже с маленьким гемором)

CREATE TABLE rules_month(
id integer primary key,
object_id integer,
month_num integer,
montр_year integer,
month_days1 INTEGER DEFAULT 0,
...
...
...
month_days31 INTEGER DEFAULT 0);

Или , без всяких сверхмудрых мыслей, просто (и вообще без гемора)

CREATE TABLE rules_month(
id integer primary key,
object_id integer,
data INTEGER -- а если нужны часы, минуты и т.д. то REAL
);

------------ Дoбавленo в 12.59:
Chipset писал(а):
За инструмент спасибо.
Таблицу на 100 000 записей заполняет три часа. Значит на 1 000 000 записей уйдёт более 30 часов.
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 186
Рейтинг: 9
#50: 2013-09-13 16:26:25 ЛС | профиль | цитата
Tad писал(а):
Таблицу на 100 000 записей заполняет три часа. Значит на 1 000 000 записей уйдёт более 30 часов.


Получается что SQlite, не поддерживает такую конструкцию?

#sql
INSERT [LOW_PRIORITY | DELAYED] [IGNORE]
[INTO] tbl_name [(col_name,...)]
VALUES (expression,...),(...),...

На mysql с помощью этого можно за 1 мин такую базу состряпать.

Может я чё не так сделал? Но error упорно показывает (near "," syntax error)
Короче чего то не нравится ему ","

code_31813.txt
карма: 0

0
файлы: 1code_31813.txt [3.2KB] [160]
Ответов: 16884
Рейтинг: 1239
#51: 2013-09-14 12:05:51 ЛС | профиль | цитата

карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 186
Рейтинг: 9
#52: 2013-09-15 10:17:54 ЛС | профиль | цитата
Tad писал(а):
hitman249, к слову, если писать в DAYS двухзначные значения (01,02,03,04... и т.д.), то великолепно отрабатывало бы и одно простое
... WHERE LIKE('%02%',month_days).

З.ы. Кстати хлебнуть этого Боржоми никогда не поздно.


Это точно, заменить Update все с 1 по 9 в month_days.

Но это даст возможность заменить
#sql
(month_days LIKE '20,%' OR month_days LIKE '%,20,%' OR month_days LIKE '%,20' OR month_days = '20')
на
#sql
LIKE('%20%',month_days)
для поиска выбранного значения.
Но для поиска "больше текущей даты" - нужен все тот же, большой составной запрос.
карма: 0

0
Ответов: 498
Рейтинг: 39
#53: 2013-09-15 22:44:47 ЛС | профиль | цитата
имхо, вариант который описал iarspider самый верный и быстрый, зачем колдовать с like когда можно просто сделать ещё 1 таблицу ?
------------ Дoбавленo в 22.44:
В варианте с поиском как минимум придётся хранить полнотекстовой индекс, против обычного индекса. Однозначно 2 вариант будет быстрее во много раз.
карма: 0

0
Ответов: 1528
Рейтинг: 57
#54: 2013-09-17 11:40:14 ЛС | профиль | цитата
кому интересно, вот чем закончилось
php

#php
function getLastRollers($date) {
$date_ex = explode('-', $date); // 17-08-2013
$date_ex[0] = (int) $date_ex[0];
$date_ex[1] = (int) $date_ex[1];
$date_ex[2] = (int) $date_ex[2];
$sql = "SELECT roller_id FROM rules_month WHERE ((month_num >= $date_ex[1] AND month_year = $date_ex[2]) OR month_year > $date_ex[2]) AND (";
$init = true;
for ($index_day = (int)$date_ex[0]; $index_day <= 31;$index_day++) {
if ($init) {
$init = false;
$sql = $sql . getLike($index_day, 'month_days');
} else {
$sql = $sql . " OR" . getLike($index_day, 'month_days');
}
}
$sql = $sql . ")";
return $sql;
}
функция которая генерит это
sql

#sql
SELECT roller_id FROM rules_month WHERE ((month_num >= 8 AND month_year = 2013) OR month_year > 2013) AND (
(month_days LIKE '17,%' OR month_days LIKE '%,17,%' OR month_days LIKE '%,17' OR month_days = '17') OR
(month_days LIKE '18,%' OR month_days LIKE '%,18,%' OR month_days LIKE '%,18' OR month_days = '18') OR
(month_days LIKE '19,%' OR month_days LIKE '%,19,%' OR month_days LIKE '%,19' OR month_days = '19') OR
(month_days LIKE '20,%' OR month_days LIKE '%,20,%' OR month_days LIKE '%,20' OR month_days = '20') OR
(month_days LIKE '21,%' OR month_days LIKE '%,21,%' OR month_days LIKE '%,21' OR month_days = '21') OR
(month_days LIKE '22,%' OR month_days LIKE '%,22,%' OR month_days LIKE '%,22' OR month_days = '22') OR
(month_days LIKE '23,%' OR month_days LIKE '%,23,%' OR month_days LIKE '%,23' OR month_days = '23') OR
(month_days LIKE '24,%' OR month_days LIKE '%,24,%' OR month_days LIKE '%,24' OR month_days = '24') OR
(month_days LIKE '25,%' OR month_days LIKE '%,25,%' OR month_days LIKE '%,25' OR month_days = '25') OR
(month_days LIKE '26,%' OR month_days LIKE '%,26,%' OR month_days LIKE '%,26' OR month_days = '26') OR
(month_days LIKE '27,%' OR month_days LIKE '%,27,%' OR month_days LIKE '%,27' OR month_days = '27') OR
(month_days LIKE '28,%' OR month_days LIKE '%,28,%' OR month_days LIKE '%,28' OR month_days = '28') OR
(month_days LIKE '29,%' OR month_days LIKE '%,29,%' OR month_days LIKE '%,29' OR month_days = '29') OR
(month_days LIKE '30,%' OR month_days LIKE '%,30,%' OR month_days LIKE '%,30' OR month_days = '30') OR
(month_days LIKE '31,%' OR month_days LIKE '%,31,%' OR month_days LIKE '%,31' OR month_days = '31') )
карма: 0

0
Ответов: 16884
Рейтинг: 1239
#55: 2013-09-17 11:57:09 ЛС | профиль | цитата
нет слов.
Вот эту конструкцию

(month_days LIKE '31,%' OR month_days LIKE '%,31,%' OR month_days LIKE '%,31' OR month_days = '31') 
прекрасно заменит

month_days LIKE '%31%'
во всех случаях, когда число двухзначное.
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 1528
Рейтинг: 57
#56: 2013-09-17 12:01:59 ЛС | профиль | цитата
Tad, у меня не только дни месяца в таком формате. переделывать это место под каждую функцию второго плана, так скоро код станет не читаем.
Конкретно в этом месте производительность стоит на 10 месте.
Редкая функция, работы не много, это не тот случай когда нужно выжимать все "соки".
карма: 0

0
Ответов: 16884
Рейтинг: 1239
#57: 2013-09-17 12:40:02 ЛС | профиль | цитата
hitman249 писал(а):
у меня не только дни месяца в таком формате
и так, на чем ты сэкономил.
Вот для этого случая, который в первом посте:
id object_id month_num month_year month_days
INTEGERINTEGERINTEGERINTEGERTEXT
12 369 8 20131,2,16,17,18,3,4,19,20,5,6,21,22,7,8,23,24,9,10,25,26,11,12,27,28,13,14,29,30,15,31
4 байта4 байта4 байта4 байтана каждый знак 1 байт. В данном случае 84 байта
На одну запись 100 байт и полный геморрой с выборкой.

При записи на каждый чих:
id object_id Data
INTEGERINTEGERINTEGER
4 байта4 байта4 байта
На одну запись 12 байт, на записи за месяц каждый день 372 байт + отсутствие проблем с выборкой.

Дело конечно хозяйское, но я бы переделал.
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 1528
Рейтинг: 57
#58: 2013-09-17 12:47:38 ЛС | профиль | цитата
Tad, интригуете конечно , но по итогу получится 372 байта чтобы сохранить то же самое
карма: 0

0
Ответов: 16884
Рейтинг: 1239
#59: 2013-09-17 12:50:45 ЛС | профиль | цитата
hitman249, если по-честному, то верится с трудом, что есть записи на каждый день для одного объекта.
Хотя, чем чёрт не шутит...
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Разработчик
Ответов: 26300
Рейтинг: 2146
#60: 2013-09-17 13:17:45 ЛС | профиль | цитата
Tad писал(а):
Хотя, чем чёрт не шутит...

А он, сволочь, всегда любит шутить в самый неподходящий момент
карма: 22

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