IF-statement in SQL om conditities te bepalen
Onderstaande query wil ik gaan gebruiken om bijlages in een bepaald topic uit een phpbb3-forum te trekken:
Ik krijg netjes een foutmelding: #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'AND YEAR(FROM_UNIXTIME(p.post_time)) = YEAR(NOW()) AND MONTH(FRO' at line 21
Maar dat had ik zelf ook wel kunnen bedenken.
De syntax van het IF-statement is goed:
Dat geeft het gewenste resultaat.
Nu heb ik bovenstaande code op dezelfde manier opgezet, maar dan met 2 ANDs erin... die moeten gaan werken als condities.
Het stuk VOOR de IF werkt prima (en is uitgebreid getest).
Of weet iemand anders een manier om heel netjes de bijlagen van vorige maand (en niet die van vorig jaar!) te pakken?
Let op dat dit script 1x in de maand wordt gedraaid, namelijk om 0:05 op de eerste dag van de maand.
Ik kan wel met INTERVAL -1 MONTH werken, maar daar moet het jaar nog bij.
En bij janauari/december kom ik dan in de knoei...
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
SELECT
a.attach_id,
u.username,
a.poster_id,
a.attach_comment,
a.download_count,
a.extension,
a.physical_filename,
FROM_UNIXTIME( p.post_time ) AS datum
FROM phpbb_attachments AS a
LEFT JOIN phpbb_posts AS p
ON ( a.post_msg_id = p.post_id )
LEFT JOIN phpbb_users AS u
ON ( a.poster_id = u.user_id )
WHERE
a.topic_id = 98
IF(
MONTH(NOW()) = 1
,
AND
YEAR(FROM_UNIXTIME(p.post_time)) = YEAR(NOW())
AND
MONTH(FROM_UNIXTIME(p.post_time)) = MONTH(DATE_ADD(NOW(), INTERVAL -1 MONTH))
,
AND
YEAR(FROM_UNIXTIME(p.post_time)) = YEAR(NOW() - 1)
AND
MONTH(FROM_UNIXTIME(p.post_time)) = 12
)
a.attach_id,
u.username,
a.poster_id,
a.attach_comment,
a.download_count,
a.extension,
a.physical_filename,
FROM_UNIXTIME( p.post_time ) AS datum
FROM phpbb_attachments AS a
LEFT JOIN phpbb_posts AS p
ON ( a.post_msg_id = p.post_id )
LEFT JOIN phpbb_users AS u
ON ( a.poster_id = u.user_id )
WHERE
a.topic_id = 98
IF(
MONTH(NOW()) = 1
,
AND
YEAR(FROM_UNIXTIME(p.post_time)) = YEAR(NOW())
AND
MONTH(FROM_UNIXTIME(p.post_time)) = MONTH(DATE_ADD(NOW(), INTERVAL -1 MONTH))
,
AND
YEAR(FROM_UNIXTIME(p.post_time)) = YEAR(NOW() - 1)
AND
MONTH(FROM_UNIXTIME(p.post_time)) = 12
)
Ik krijg netjes een foutmelding: #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'AND YEAR(FROM_UNIXTIME(p.post_time)) = YEAR(NOW()) AND MONTH(FRO' at line 21
Maar dat had ik zelf ook wel kunnen bedenken.
De syntax van het IF-statement is goed:
Dat geeft het gewenste resultaat.
Nu heb ik bovenstaande code op dezelfde manier opgezet, maar dan met 2 ANDs erin... die moeten gaan werken als condities.
Het stuk VOOR de IF werkt prima (en is uitgebreid getest).
Of weet iemand anders een manier om heel netjes de bijlagen van vorige maand (en niet die van vorig jaar!) te pakken?
Let op dat dit script 1x in de maand wordt gedraaid, namelijk om 0:05 op de eerste dag van de maand.
Ik kan wel met INTERVAL -1 MONTH werken, maar daar moet het jaar nog bij.
En bij janauari/december kom ik dan in de knoei...
Gewijzigd op 01/01/1970 01:00:00 door Eddy Erkelens
Gesponsorde koppelingen:
SQL CASE THEN
Kijk daar eens naar.
Kijk daar eens naar.



