выборка n-записей не из таблицы

buck

Новичок
Доброго времени суток,
помню что как то можно, а вот как запамятовал

допустим нужно выбрать 10 дней от сегодняшней даты
делаю это следующим образом:
SELECT ADDDATE(curdate(),@a:=IF(@a,@a+1,1)) AS DATES FROM `tmp1` LIMIT 10
где `tmp1` таблица с количеством строк >= чем нужно
что можно использовать вместо существующей таблицы ?
 

buck

Новичок
потому что это часть задачи )
опишу полностью.
есть таблица примерно следующего содержания,
rangeStart - rangeEnd = промежуток проведения мероприятий
w_days = дни недели проведения мероприятий
--------------
CREATE TABLE `tmp1` (
`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`rangeStart` INT(10) UNSIGNED NOT NULL DEFAULT '0',
`rangeEnd` INT(10) UNSIGNED NOT NULL DEFAULT '0',
`w_days` VARCHAR(50) NULL DEFAULT '',
PRIMARY KEY (`id`)
)
--------------
нужно выбрать записи с днями проведения мероприятий допустим от сегодня и в теч. 10 дней
выбираю следующим образом:

SELECT * FROM `tmp1`
INNER JOIN (SELECT ADDDATE(curdate(),@a:=IF(@a,@a+1,1)) AS DATES FROM `tmp1` LIMIT 10) AS X
ON (
(UNIX_TIMESTAMP(X.DATES) BETWEEN `rangeStart` AND `rangeEnd`)
AND (`w_days`='' OR DAYOFWEEK(X.DATES) IN (`w_days`))
)
-------------
ну и в общем-то сабж касаемый подзапроса
 

Вурдалак

Продвинутый новичок
Запросы и структура — говно какое-то. В любом случае.

Можно завести 2 таблицы: events (id, start, end) и event_days (event_id, date). При сохранении данных о мероприятии внести все дни, в которые будут проводиться мероприятие, тогда потребуется простейший запрос для выбора дней. Плюс в том, что можно задавать конкретные дни, а не только дни недели.

Если же эта гибкость нафиг не нужна, можно обойтись одной таблицей events (id, start, end, days_of_week) и, опять же, простейшим запросом выбирать мероприятия и уже на стороне PHP генерировать дни. Ещё минус в том, что постраничную навигацию труднее реализовать.
 

tz-lom

Продвинутый новичок
и зачем так всё сложно? почему не просто сравнение по timestamp ,он аддитивен,можете рассчитывать его до запроса(ну или внутри запроса если так угодно)
проверка на дни недели тоже не до конца понятна,она нужна только если у вас дата начала/окончания не совпадает с днём недели, это вообще нужно? даже если и нужно зачем так ?
 

buck

Новичок
2 Вурдалак
вобщем то проблема как раз в том что предложенная структура "таблица событий" и "таблица дат событий" как раз и использовалась, вариант с использованием промежутка проведения и дней недели уменьшает обьем таблиц на пару порядков записей, в общем и засасывается инфо из файлов с таким расположением столбцов
2 tz-lom
промежуток проведения - это допустим с 1.01 по 29.02, а дни недели как "пусто" - если ежедневно, так и допустим "2,4,6" - т.е. по понедельникам,средам и пятницам

зыж: запрос писал прям сюда поэтому ток сейчас заметил в выборке
DAYOFWEEK(X.DATES) IN (`w_days`)
вместо
FIND_IN_SET(DAYOFWEEK(X.DATES), `w_days`)
 

Вурдалак

Продвинутый новичок
buck, я уже сказал, что если критично — используй второй вариант:
Если же эта гибкость нафиг не нужна, можно обойтись одной таблицей events (id, start, end, days_of_week) и, опять же, простейшим запросом выбирать мероприятия и уже на стороне PHP генерировать дни
Но в большинстве случаев новички страдают ерундой по поводу объёма таблиц.
 

buck

Новичок
Но в большинстве случаев новички страдают ерундой по поводу объёма таблиц.
поверь, если приспичило переделать значит страдают не просто так )
на стороне PHP генерировать дни
тоже не вариант т.к. нужно не просто 10 дней от конкретной даты, а дни когда проводятся мероприятия

вообще вопрос задал утрировано, установив акцент на части которая интересует, упрознив все то что не относится к проблеме
 

buck

Новичок
писал, писал и передумал ), обьяснять структуру долго, забей, вопрос был в другом
 
Сверху