Вверх ↑
Этот топик читают: Гость
Ответов: 1528
Рейтинг: 57
#1: 2013-09-11 07:49:21 ЛС | профиль | цитата
idobject_idmonth_nummonth_yearmonth_days
12369820131,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
23362820147,20,17,3
2236210201319,20,7,4
213629201220,5,9,25,7
163638201319,2,29,1
20381820135,8,22,26,29,13


Исходные данные: "Текущая дата".

Требуется выдать значения которые равны текущей дате либо больше текущей даты.
Выборку из month_days я делаю так:
#sql
SELECT * FROM rules_month WHERE (month_days LIKE '20,%' OR month_days LIKE '%,20,%' OR month_days LIKE '%,20' OR month_days = '20')
карма: 0

0
Ответов: 16884
Рейтинг: 1239
#2: 2013-09-11 09:11:25 ЛС | профиль | цитата

карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 1528
Рейтинг: 57
#3: 2013-09-11 09:49:52 ЛС | профиль | цитата
Tad, а число 200 оно не спутает?
карма: 0

0
Ответов: 1061
Рейтинг: 22
#4: 2013-09-11 10:16:16 ЛС | профиль | цитата
hitman249, похоже не ты составлял базу! ) Как в поле дат может быть цифра 200? )
карма: 0

0
Ответов: 1528
Рейтинг: 57
#5: 2013-09-11 10:22:59 ЛС | профиль | цитата
RinniX, также, как может быть число 2 и числа 20,21,22,23,24,25,26,27,28,29
или 1 и числа 10,11,...
результат в таком запросе будет одинаков.
карма: 0

0
Ответов: 1061
Рейтинг: 22
#6: 2013-09-11 10:55:25 ЛС | профиль | цитата
hitman249 писал(а):
Требуется выдать значения которые равны текущей дате либо больше текущей даты.

В таком варианте поля month_days, у тебя просто-так сделать выборку не получится!
------------ Дoбавленo в 10.36:
hitman249 писал(а):
SELECT * FROM rules_month WHERE (month_days LIKE '20,%' OR month_days LIKE '%,20,%' OR month_days LIKE '20,%' OR month_days = '20')

А что тебя не устраивает твой запрос? Делаешь запрос, прибавляешь 1 к числу, опять запрос, и т.д., предварительно запоминая id строки! )
------------ Дoбавленo в 10.49:
SELECT * FROM rules_month WHERE month_days LIKE '%20,%21,%22,%23,%'
------------ Дoбавленo в 10.55:
hitman249, как-то цифры у тебя в базу добавляются не закономерно, "5,8,22,26,29,13", запятая постоянно должна быть либо в начале либо в конце! )
карма: 0

0
Ответов: 5446
Рейтинг: 323
#7: 2013-09-11 11:10:03 ЛС | профиль | цитата
hitman249, то, что ты показал - это порнография, а не база данных. Не жадничай, пусть у тебя на каждый month_days будет отдельная строка, а уж как ты это пользователю покажешь - это твоё дело.
карма: 1

0
Ответов: 1061
Рейтинг: 22
#8: 2013-09-11 11:29:19 ЛС | профиль | цитата
hitman249, лучший вариант в такой базе это:
RinniX писал(а):
Делаешь запрос, прибавляешь 1 к числу, опять запрос, и т.д., предварительно запоминая id строки! )

других вариантов не вижу.
карма: 0

0
Ответов: 1528
Рейтинг: 57
#9: 2013-09-11 12:55:14 ЛС | профиль | цитата
iarspider, нужен был режим "человека_в_голой_базе_понимака"
а так, оверхед просто астрономический, запомнить не много данных = тысячи строк, запомнить много = сотни тысяч.

RinniX писал(а):
других вариантов не вижу.

есть другой вариант. зайти к проблеме "с боку".
карма: 0

0
Ответов: 1061
Рейтинг: 22
#10: 2013-09-11 13:18:41 ЛС | профиль | цитата
hitman249, а какую базу данных используешь? (SQLite, MySQL)
карма: 0

0
Ответов: 1528
Рейтинг: 57
#11: 2013-09-11 13:22:53 ЛС | профиль | цитата
RinniX, м, не понимаю, чем это может помочь. (MySQLMariaDB)
карма: 0

0
Ответов: 16884
Рейтинг: 1239
#12: 2013-09-11 14:32:17 ЛС | профиль | цитата

карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Разработчик
Ответов: 26303
Рейтинг: 2146
#13: 2013-09-11 15:07:57 ЛС | профиль | цитата
Tad писал(а):
Есть месяц, есть число от 1 до 31

А если нужно найти 2, то запрос LIKE '%2%' сработает и на 2, и на 20. А вот LIKE '%2,%', к примеру, сработает только на 2.
Я помню этот запрос (я же его и предложил), его уже обсуждали как-то, и ты там участвовал, так вот именно только такой запрос корректно работал
------------ Дoбавленo в 15.07:
hitman249 писал(а):
Выборку из month_days я делаю так:

По-моему, у тебя ошибка есть в запросе, вместо последнего LIKE '20,%' надо LIKE '%,20', а то он у тебя повторяется. Должно же быть -- 20 в начале, 20 в середине, 20 в конце, единственное 20
карма: 22

0
Ответов: 16884
Рейтинг: 1239
#14: 2013-09-11 15:58:50 ЛС | профиль | цитата
nesco, тут ты прав - LIKE '%2%' сработает на 2,12,20..29
О чем это говорит ? Только о том, что БД спроектирована неверно.
hitman249, попробуй , в SQL есть такая функция instr(строка, подстрока) - возвращает позицию или 0 если ненашло.

SELECT * FROM rules_month where instr(month_days,'20') >0
В SQLite instr(X,Y) заявлена, но... кастрирована.
Ты же вроде не в SQLite работаешь.

карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 186
Рейтинг: 9
#15: 2013-09-11 16:40:55 ЛС | профиль | цитата
Tad писал(а):
О чем это говорит ? Только о том, что БД спроектирована неверно.


Согласен с тобой.

hitman249 писал(а):
Требуется выдать значения которые равны текущей дате либо больше текущей даты.
Выборку из month_days я делаю так:


Эта выборка касается поля month_days конкретного id, или надо по всей базе выбирать?

Выборку делаешь почти правильную, для нахождения нужного значения.
Два раза это поставил.

#sql
month_days LIKE '20,%'

Этим ты найдешь все id (строки) где есть 20 в month_days

#sql
SELECT * FROM rules_month WHERE month_days LIKE '20,%' OR month_days LIKE '%,20,%' OR month_days LIKE '%,20' OR month_days = '20'

А вот больше текущей даты это вопрос. Проще в hiasm сделать

карма: 0

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