Jag är helt grön på SQL, men jag hade tänkt lära mig det nu. Kan grundläggande konstruktioner i SQL, och jag har hyfsad koll på hur man bygger databaser på ett normaliserat sätt. Sitter med MySQL. <b>1. Finns det något vettigt sätt att lösa ovanstående problem, något i stil med att ha en annan tabell som visar alla nyheter som inte gått ut, och uppdatera denna en gång om dagen.</b> <b>>Givetvis kan man göra så, men du får redundant data vilket inte är så kul...</b> <b>>Givetvis kan man göra så, men du får redundant data vilket inte är så kul... <b>>Om du ändrar en nyhet i din "dagtabell" och glömmer ändra i "orginalet" kommer ju förändringen försvinna nästa gång tabellen uppdateras.</b>"Spara data ibland"
Nu har jag en fundering hur man kan lösa följande (det är inte något skarpt än, utan bara mina funderingar):
Låt säga att jag bygger ett system där personer kan skicka in nyheter. Det kan till exempel vara vissa händelser. En nyhet består naturligtvis av en rubrik, en brödtext och ett inläggningsdatum, och ett lämpligt sätt att presentera dem är att visa de fem senast inlagda. Det blir väl i så fall något i stil med
"SELECT * FROM news ORDER BY date LIMIT 5"
Eller?
Om vi nu tänker oss att nyheterna även har ett "utgångsdatum"; om en nyhet handlar om något som händer den 5:e juli så ska nyheten bara gälla tills den 5:e. Jag kan naturligtvis lägga till en
"WHERE utgang<today", eller hur man nu skulle skriva det, men då blir det ju en extra operation varje gång.
Mina frågor är då som följer:
1. Finns det något vettigt sätt att lösa ovanstående problem, något i stil med att ha en annan tabell som visar alla nyheter som inte gått ut, och uppdatera denna en gång om dagen.
2. Hur gör man det bäst i så fall (själva "en gång om dagen")?
3. Är det meningsfullt att tänka på det här sättet överhuvudtaget?Sv: "Spara data ibland"
Givetvis kan man göra så, men du får redundant data vilket inte är så kul... Where-satsen kostar inte så mycket att det är värt besväret. Om det ska vara meningsfullt måste det handla om ett hårt belastat system där man ligger väldigt nära gränsen för vad hårdvaran klarar av i prestanda.
<b>2. Hur gör man det bäst i så fall (själva "en gång om dagen")?</b>
Tror inte att man kan schemalägga något sådant direkt i MySQL, man får göra ett program eller script som man schemalägger på servern i sådana fall. Ett annat alternativ kan vara en trigger som uppdaterar varje gång en nyhet ändras eller läggs till, men jag vet inte hur det är med stöd för triggers i MySQL.
<b>3. Är det meningsfullt att tänka på det här sättet överhuvudtaget?</b>
Enligt min mening: Nej
/JohanSv:"Spara data ibland"
Utveckla gärna!
Vad kan det finnas för problem med extra data; bara onödiga platskrav, eller finns det mer fundamentala grejer som blir problematiska?
<b>>Where-satsen kostar inte så mycket att det är värt besväret. Om det ska vara meningsfullt måste det handla om ett hårt belastat system där man ligger väldigt nära gränsen för vad hårdvaran klarar av i prestanda.</b>
Ja, det är klart, det här är ju ett väldigt "lätt" exempel.
<b>>Tror inte att man kan schemalägga något sådant direkt i MySQL, man får göra ett program eller script som man schemalägger på servern i sådana fall. Ett annat alternativ kan vara en trigger som uppdaterar varje gång en nyhet ändras eller läggs till, men jag vet inte hur det är med stöd för triggers i MySQL.</b>
Okej, låt säga att jag har Apache och PHP installerat, det borde inte gå enbart med dem, eller?
Måste börja tänka någonstans... =)Sv: "Spara data ibland"
Utveckla gärna!
Vad kan det finnas för problem med extra data; bara onödiga platskrav, eller finns det mer fundamentala grejer som blir problematiska?</b>
Inte några större problem i detta exemplet förvisso, men har man samma information lagrat på flera ställen och man sedan börjar göra förändringar är det lätt att glömma ändra på ett ställe. Tekniskt sett är det inga problem (förutom utrymmesbehovet då), men det är lätt att göra bort sig så att man tror att man har ändrat något som man egentligen inte har gjort. Om du ändrar en nyhet i din "dagtabell" och glömmer ändra i "orginalet" kommer ju förändringen försvinna nästa gång tabellen uppdateras.
<b>>Where-satsen kostar inte så mycket att det är värt besväret. Om det ska vara meningsfullt måste det handla om ett hårt belastat system där man ligger väldigt nära gränsen för vad hårdvaran klarar av i prestanda.
Ja, det är klart, det här är ju ett väldigt "lätt" exempel.</b>
Jag har inga djupare kunskaper i "kostnaden" för olika operationer, men jag har aldrig varit med om att urvalen tar speciellt mycket tid när man gör en del annat samtidigt.
<b>>Tror inte att man kan schemalägga något sådant direkt i MySQL, man får göra ett program eller script som man schemalägger på servern i sådana fall. Ett annat alternativ kan vara en trigger som uppdaterar varje gång en nyhet ändras eller läggs till, men jag vet inte hur det är med stöd för triggers i MySQL.
Okej, låt säga att jag har Apache och PHP installerat, det borde inte gå enbart med dem, eller?</b>
Jag har inte hört att det skulle finnas någon schemaläggare i varken Apache eller PHP, så det går nog inte.
/JohanSv:"Spara data ibland"
Ja, det är ju sant förstås, och ändrar jag i originalet så kommer ju inte den ändringen upp i "dagtabellen" förrän nästa dag.
<b>>Jag har inte hört att det skulle finnas någon schemaläggare i varken Apache eller PHP, så det går nog inte.</b>
Okej, då skippar jag det ur tänket tills vidare.
Tackar för bra svar, skönt att få vädra tankarna lite! =)