Where probleem in sql statement
de gegevens zien er volgende uit:
colum_name
2009week3
2009week4
2009week5
2009week6
tot...
2010week1
2010week2
2010week3
Hoe kan ik nu alles selecteren van 2009week4 tot 2010week2 ?? Is er een hoger lager dan functie die ik kan gebruiken samen met een LIKE? of weet iemand een betere oplossing?
vriendelijk bedankt
waarom verdeel je dat niet op een veld jaar en een veld week.
Integers rekenen makkelijker dan gecodeerde strings
Het is een bestaande database, normaal zou ik meerdere colums gebruiken.
Je database model klopt niet. Je hoort data op te slaan. Geen strings.
Ik denk dat je dan op zoiets komt (niet getest)
SELECT colum_name,
LEFT(column_name,4) AS yearpart,
SUBSTRING(column_name,8) AS weekpart
FROM table_name
WHERE
( yearpart=2009 AND weekpart >3 ) OR
( yearpart=2010 AND weekpart <2 )
Het is voor een bestaande database, ik doe het wel in php.
Het in PHP uitvoeren is wel een slechte keuze. Dan haal je eerst alle data op terwijl dat niet nodig is.
Het is ook mogelijk om met wat logica de sql string zo te bouwen dat de juiste WHERE krijgt, in een vorm zoals
Code (php)
1
2
3
4
5
2
3
4
5
SELECT
...
FROM table_name
WHERE
colum_name = '2009week3' OR colum_name = '2009week4' OR colum_name = '2009week5' ...
...
FROM table_name
WHERE
colum_name = '2009week3' OR colum_name = '2009week4' OR colum_name = '2009week5' ...
Je laat dus op voorhan php alle mogelijke jaar/weken berekenen.
Ook hier blijft de opmerking dat dit misschien niet de conventionele manier is om met databases om te gaan.
Gewijzigd op 08/12/2010 16:24:54 door Kris Peeters
Query: SELECT * FROM productstats WHERE A <> '' AND R >= '2009week1' AND R <= '2011week34' order by R ;
Ik dacht als mysql de orber by kan dan snapt het hoger/lager waarschijn ook wel en voila.
Karel hertens op 08/12/2010 22:19:02:
Ik dacht als mysql de orber by kan dan snapt het hoger/lager waarschijn ook wel en voila.
Weet dan wel dat bv. 2009week5 verder staat dan 2009week15.
Je redenering zou kloppen mochten je weken telkens in twee karakters worden geschreven, met leading zero.
Dat was dus mijn gelukje :) en anders trek ik daar een keer een script overheen om aan te passen.