
Демо - http://demobuh.skahin.ru
Пароль и логин: admin
Описание возможностей и онлайн использование: http://buh.skahin.ru
Разработка и исходный код: https://github.com/pihel/cash
Личный блог. Заметки о программировании и не только
createFunction('UPPER_UTF8', 'upper_ru', 1); //array('SQLITE_DB', 'upper_ru') - если используете в составе класса 'SQLITE_DB' ?>После этих нехитрых манупуляций в составе SQLite появится новая функция UPPER_UTF8 и с помощью ее можно будет делать регистронезависимые запросы:
SELECT t.* FROM table t WHERE UPPER_UTF8(t.col) LIKE UPPER_UTF8('%кАкойТо Запрос%')
--таблица CREATE TABLE "cashes" ( "id" INTEGER PRIMARY KEY NOT NULL, "date" DATE NOT NULL, "uid" INT(10) NOT NULL DEFAULT ('1'), "visible" TINYINT(4) NOT NULL DEFAULT ('1') ); --индекс CREATE INDEX "XIF_CASHES_DUV" on cashes (date DESC, uid ASC, visible ASC); --вызов плана EXPLAIN QUERY PLAN SELECT c.id, c.uid, c.date FROM cashes c WHERE c.date BETWEEN '2013-04-01' AND '2013-06-01' AND c.uid = 1 AND c.visible = 1 ORDER BY c.date; --план SEARCH TABLE cashes AS c USING INDEX XIF_CASHES_USR (uid=?) (~2 rows)А дальше, как нужно было правильно создавать индекс. Поле даты - поле диапозона, должно было идти последним:
--индекс CREATE INDEX "XIF_CASHES_DUV" on cashes (uid ASC, visible ASC, date DESC); --план запроса SEARCH TABLE cashes AS c USING INDEX XIF_CASHES_DUV (uid=? AND visible=? AND date>? AND date<?) (~42 rows)Причем если бы мы искали точное соответствие по дате, то сработали бы оба индекса, но при поиске по диапазону только последний.