Задавайте вопросы, мы ответим
Вы не зашли.
Здравствуйте.
Столкнулся с проблемой, которую никак не могу решить. Уже кипит голова.
Есть в таблице ячейка. Имя summary тип VARCHAR. В ней находятся данные в таким виде:
2011-04-20,2011-04-28,<тут произвольное кол-во символов>;2011-05-15,2011-06-09,<тут произвольное кол-во симолов>;
и т.д. и это все в одной записи. Таких записей много.
У меня есть запрос в виде даты, допустим: 2011-04-25,2011-05-20
Как можно догадаться во всех случаях идет "от и до" дата. Мне нужно записи в таблице, даты которых совпадают с датой запроса.
Как видно здесь обе записи совпадают, а вот если был запрос 2011-04-23,2011-04-30 - то попадала бы только первая. Хотя так как это все в одной ячейке, т.е. в одной записи, то вся бы запись взялась. Но это уже пол беды. Не буду же я брать каждую запись из базы и explode для того, чтобы разобрать.
Буду рад любым советам!
Отредактированно Droy (29.04.2011 14:01:42)
Неактивен
Здравствуйте.
Думаю, что здесь - самое лучшее, это хранить даты, которые через запятую вбиты в записи summary в отдельной таблице( и чтобы тип там был не varchar, а date), то есть реализовать отношение многие ко многим. Далее спокойно сравнивать даты средствами sql.
Отредактированно deadka (29.04.2011 20:16:26)
Неактивен
Спасибо за ответ.
Странно, но на всех форумах только советуют, как лучше устроить базу. Я как бы и так это знаю и перед мной поставили задачу что-то сделать при данной ситуации. Если бы я писал с нуля скрипт, я бы обязательно сделал все по-другому.
Неактивен
Ну, здесь это было бы лучше всего. Если не получается, то никуда не деться от того, чтобы разбивать каждую запись таблицы на кусочки и сравнивать с интервалом. Разве что даты у Вас в рамках одной записи отсортированы - тогда по идее можно поиграться как-то так:
функцией substr вырезать первую/последнюю запись, привести их к типу date и сравнивать с значениями, пришедшими извне.
Начните с
Отредактированно deadka (29.04.2011 20:58:13)
Неактивен
Спасибо. Но к сожалению substr тоже не будет особо эффективен, т.к. в одной записи может быть несколько дат через точку с запятой. Существует в mysql что-то вроде аналога explode в php?
Отредактированно Droy (29.04.2011 22:11:55)
Неактивен
Cамой функции explode не видно, она ж массив возвращает по идее...
Посмотрите сюда, может чем поможет.
Droy написал:
Спасибо. Но к сожалению substr тоже не будет особо эффективен, т.к. в одной записи может быть несколько дат через точку с запятой.
Я потому и уточнил, отсортированы ли даты в рамках одной записи. Если да, то достаточно посмотреть, попадает ли в интервал дат, пришедший извне, первая и последняя дата в записи. Если же не отсортированы, тады ой - либо хранимую процедуру писать, где разбить строки по символу ";" и их уже сравнивать, либо на клиенте, как Вы, похоже, и делаете.
Отредактированно deadka (29.04.2011 22:43:45)
Неактивен
Спасибо за помощь.
Сурово. Похоже придется уговаривать все переделать
Тему можно закрыть.
Неактивен