 |
[Help Needed] SQL Request. Getting each day of date period. |
 |
12.09.2007, 21:01
|
#1
|
инсценирующи
Join Date: 07 2002
Location: Fireplace of Ecotopia
Age: 39
Posts: 4,327
Rep Power: 5
|
[Help Needed] SQL Request. Getting each day of date period.
I have, a table containing events, and need to show them up in a calendar, for a month.
Here is the table I have.
Code:
1.
+------+--------------------+-------------------+------------+
| id | start_date | end_date| text |
+------+--------------------+-------------------+------------+
| 1 | 2007-09-12 00:00:00|2007-09-12 23:59:59| Party |
| 2 | 2007-09-13 00:00:00|2007-09-13 23:59:59| Concert |
| 3 | 2007-09-13 00:00:00|2007-09-17 23:59:59| Festival |
| 4 | 2007-09-15 00:00:00|2007-09-15 23:59:59| Exhibition |
| 5 | 2007-09-16 00:00:00|2007-09-16 23:59:59| Shooting |
+------+--------------------+-------------------+------------+
I'd like to get, smth like.
Code:
2
+------+-----------+
| day | Text |
+------+-----------+
| 12| Party |
| 13| Concert |
| 13| Festival |
| 14| Festival |
| 15| Festival |
| 15| Exhibition|
| 16| Festival |
| 16| Shooting |
| 17| Festival |
+------+-----------+
Do you have ideas, how this can be done?
Order, doesn't really matter, currently. So you can ignore, this as well as the time part of DATETIME.
Ideally, I need, to get, smth like :
Code:
3
+------+--------------------------+
| day | Text |
+------+--------------------------+
| 12| Party |
| 13| Concert <br> Festival |
| 14| Festival |
| 15| Festival <br> Exhibition |
| 16| Festival <br> Shooting |
| 17| Festival |
+------+--------------------------+
But, I can do this with php, if i'd get the second table.
First table could also be done, through php, but I'd prefer to do it with MySQL, rather then processing "raw data" with PHP.
I'm sure this all can be done though MySQL, but i'm just out of ideas.
__________________
...ибо...
Rgrdz. [ Кселджэн ]
|
|
|
 |
13.09.2007, 12:21
|
#2
|
Главный Лысый
Join Date: 10 2001
Location: AM
Age: 47
Posts: 2,829
Rep Power: 5
|
Поиграйся с group by dayofmonth(start_date).
Что то типа select dayofmonth(start_date), text group by dayofmonth(start_date)
Если нужна добавка и месяца то
select month(start_date), dayofmonth(start_date), text group by month(start_date), dayofmonth(start_date)
Должно работать для мускула. Про другие движки не знаю.
__________________
Ruben Muradyan
Technical Director
PanARMENIAN Network: Armenian News
----------------------------------------------------
Лысина - это полянка, вытоптанная мыслями.
----------------------------------------------------
|
|
|
13.09.2007, 19:54
|
#3
|
инсценирующи
Join Date: 07 2002
Location: Fireplace of Ecotopia
Age: 39
Posts: 4,327
Rep Power: 5
|
Сделал, это через пхп, так как дизайнеру, нужна была большая степень свободы в шаблоне, и там уже полюбому нужно было, лопатить массивы, так что делать это в двух местах глупо.
Но вопрос остается, тут загводка в том, как средствами ДБ из диапазона типа 2007-09-10 2007-09-15 получить, 6 строк, с датой каждого дня. тут как раз нужен какой-нибудь ungroup, а не group 
Либо каким то еще макаром заставить выводить его, одну и ту же запись, несколько раз.
Остается еще изврат с созданием временной таблицы с перечнем всех дней месяца, но тут овчинка уже ни по одному критерию, не стоит выделки.
__________________
...ибо...
Rgrdz. [ Кселджэн ]
|
|
|
13.09.2007, 22:38
|
#4
|
4294967296
Join Date: 03 2002
Location: /proc/1
Age: 40
Posts: 379
Rep Power: 0
|
__________________
Free your mind and your OS will follow
|
|
|
 |
|
 |
14.09.2007, 04:33
|
#5
|
Младенец
Join Date: 06 2002
Location: Armenia, Yerevan
Posts: 34
Rep Power: 0
|
Quote:
Originally Posted by [ Xelgen ]
Сделал, это через пхп, так как дизайнеру, нужна была большая степень свободы в шаблоне, и там уже полюбому нужно было, лопатить массивы, так что делать это в двух местах глупо.
Но вопрос остается, тут загводка в том, как средствами ДБ из диапазона типа 2007-09-10 2007-09-15 получить, 6 строк, с датой каждого дня. тут как раз нужен какой-нибудь ungroup, а не group 
Либо каким то еще макаром заставить выводить его, одну и ту же запись, несколько раз.
Остается еще изврат с созданием временной таблицы с перечнем всех дней месяца, но тут овчинка уже ни по одному критерию, не стоит выделки.
|
Ինչքան գիտեմ MySQL-ը նման խնդրի լուծման համար ստանդարտ մեթոդներ չունի.
Օրինակ MSSQL-ի մեջ ռեկուրսիվ կանչերով նման բան կարելի է սատանալ:
Համենայն դեպս MySQL-ի համար, ժամանակավոր table օգտագործելով կարելի է էդ խնդիրը լուծել, բայց թե որքանով է դա հարմար, կախված է քո պահանջներից:
Quote:
CREATE TABLE `t1` (
`id` int(11) NOT NULL auto_increment,
`d1` date NOT NULL,
`d2` date default NULL,
`event` varchar(20) default NULL,
PRIMARY KEY (`id`),
KEY `d1` (`d1`,`d2`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
SET @v=0;
DROP TABLE IF EXISTS TMP;
CREATE TEMPORARY TABLE TMP(a int not null AUTO_INCREMENT,KEY(a));
INSERT INTO TMP VALUES(0),(0),(0),(0),(0),(0),(0),(0),(0),(0),(0),(0),(0),(0),(0),(0),(0),(0),(0),(0),(0),(0),(0),(0),(0),(0),(0),(0),(0),(0),(0),(0);
SELECT a.d1, a.event, 0 FROM t1 AS a
UNION
SELECT ADDDATE(a.d1, @v+1), a.event, @v:=@v+1
FROM t1 AS a
LEFT JOIN TMP AS T ON a.d1<>T.a AND @v<(a.d2-a.d1)
WHERE a.d1<a.d2;
--DROP TABLE TMP;
|
|
|
|
 |
17.09.2007, 03:41
|
#6
|
Академик
Join Date: 01 2002
Location: Shambala
Age: 46
Posts: 7,016
Rep Power: 6
|
Rekurskia chka MySQL um ed hastat, ORacle um ka, MS SQL um el, baycMySQL um chka u ed nshanakuma ed xndri lucman hamar miak tarberak zamanakavor axusyaki ogtagorcumna
|
|
|
12.11.2007, 21:35
|
#7
|
наивная дурочка
Join Date: 10 2005
Location: бродяжка я
Age: 41
Posts: 196
Rep Power: 4
|
Lorem ipsum dolor sit amet.
__________________
Я поняла, любовь - страна, Где каждый человек - притворщик.
|
|
|
13.06.2008, 11:36
|
#8
|
Младенец
Join Date: 06 2008
Location: -
Posts: 3
Rep Power: 0
|
Если вам так принципиально нужно сделать это в код SQL, используете MySQL версии 5 и выше. Этот сервер поддерживает хранимые процедуры.
В них доступны if/then/else, case, while, repeat, loop, goto
Напишите процедуру и вызывайте её.
Впрочем это будет работать медленее чем PHP. Подумайте насчет написать функцию PHP которая будет слоем абстракции между SQL вызовом и остальым кодом PHP. (Т.е. она тянет из БД данные, обрабатывает и выдает нужный вам массив).
|
|
|
10.07.2008, 12:27
|
#9
|
Школьник
Join Date: 11 2005
Location: AM
Posts: 178
Rep Power: 4
|
v MSSQL est super vesh PIVOT ochen udobno budet dlia vivedenia
otcheta po dniam mesiaca esli eti dni iavliautsia stolbikami
naskolko ponial eto 2-aia chas zadania
temp table legko mojno ispolzovat v procedure
est 2 vida temp tableov
#table i @table
mejdu nimi bolshaia raznica
i mojno ispolzovat v razlichnikh procedurakh daje v rekursii
|
|
|
All times are GMT. The time now is 01:45. |
|
|