Problematik datumsökning MySQL
Jag håller på med ett databasbygge för webben och jobbar i PHP och MySQL.
Jag har ställts inför ett litet problem som jag har svårt att komma runt med mina kraftigt begränsade programmeringskunskaper.
Databasen är uppbyggd av ett stort antal tabeller som motsvarare en avskriven volym och typ av längd. Av dessa skapar jag sedan anpassade vyer (views) för att applicera mina queries på.
Nu håller jag på och gör sökfunktion för data hämtade ur födelseböcker. Problemet jag har hänger ihop med att dessa födslar kan innehålla två olika datum, födelsedatum och dopdatum. Ibland är det båda, ibland endera och ibland inget.
Jag försöker nu skapa en datumsortering av dessa poster, vilket inte är lätt.
Skulle jag välja att sortera på endera av datumkolumnerna kommer alla som inte har ett angivet datum i den kolumnen att sorteras först eftersom de får datumet 0000-00-00. Därför har jag försökt skapa en ny, tredje datumkolumn, enbart som sorteringshjälp. Tanken är att först och främst skall sorteringskolumnen i viewn innehålla födelsedatum om det finns, sen dopdatum och slutligen 0000-00-00 om inget av dem finns.
Till detta har jag försökt använda COALESCE vilket returnerar det första värdet som inte är NULL:
Kod:
COALESCE(FDatum, DDatum, "0000-00-00") AS Date
Men det fungerar inte eftersom "0000-00-00" inte tolkas som ett datum och därför ändras typen på fältet från DATE till någon variant av CHAR. Då tappar jag funktionaliteten av datumtypen. Detta skulle man väl kunna komma runt genom att skapa en dummy-kolumn i varje tabell där alla poster får datumet 0000-00-00 och byta ut det i koden ovan, men det känns som en konstig omväg!?
Ett annat problem är att för att kunna använda COALESCE enligt ovan måste jag ersätta alla tomma rutor i databasen med NULL, vilket får till följd att när jag försöker skapa en sql-fråga i PHP så hittar sökningen inte någon post som har ett NULL i endera datumkolumnen.
Jag tycker att sqlfrågan borde vara utformad typ så här:
Kod:
$sql = mysql_query("SELECT * FROM vy WHERE
FDatum LIKE '$FDatum%'
AND DDatum LIKE '$DDatum%'
AND X LIKE '$X%'
AND Y LIKE '$Y%'
AND Z LIKE '$Z%'
o. s. v.
Men det är något som inte fungerar med datumen?
Hur löser jag den här problematiken?
Ska man använda CASE i s f COALESCE och hur går det till?
All hjälp mottages tacksamt!
MVH
Jonas