Vinnaren i pepparkakshustävlingen!
2011-08-15, 21:22
  #1
Medlem
Doktor_Blys avatar
Ber om ursäkt för krånglig rubrik, väldigt svårt att sätta en rubrik som tydligt visar vad jag önskar. Jag har skapat ett statistikprogram som automatiskt uppdaterar en MySQL-databas med information om inloggade spelare. SQL-databasen uppdateras en gång per minut, och ny data tillkommer i kolumnerna. Problemet är bara att jag inte får den önskade effekten att den gamla datan skrivs över då ny data inkommer. Detta resulterar inte bara i att databasen med tiden tar upp onödig plats, utan också att det blir mer eller mindre omöjligt att presentera en tabell på en webbplats (mysql_connect, mysql_fetch_array) då samtliga enterys visas, istället för endast den nyaste.

Det jag funderar över är om det finns något sätt att skriva över en tabell med ny info varje gång databasen uppdateras, eller om inte, om det går att radera innehållet i tabellerna en gång per minut (som är tiden för uppdateringsfrekvensen). Vore väldigt tacksam för svar. Helst bör jag kunna lösa detta direkt från MySQL, alternativt får jag leva med minnes-problemet och rensa gamla tabeller manuellt då och då, om jag får en alternativ php kod som endast visar den nyaste uppdateringen och inget annat.

STORT tack på förhand!
/Bly
Citera
2011-08-15, 21:41
  #2
Medlem
Narkotikovs avatar
Hmm, hur skriver du över datan exakt? Kan du skriva ned SQL-kommandot du använder?

Hur som helst så låter det som att du är ute efter UPDATE-kommandot.
Kod:
update table column1=value, column2=value where column3=value

http://www.w3schools.com/sql/sql_update.asp
Citera
2011-08-15, 22:50
  #3
Moderator
Protons avatar
För att kasta ut ALL data ur en tabell och nollställa evenuella autoincrements man har kan man använda kommandot
Kod:
TRUNCATE TABLE myTable 
som när det körs omedelbart kommer nollställa tabellen.

För att köra detta en gång per minut rekommenderar jag att du tar en titt på cron (som du kan använda för att starta ett php-script varje minut som ansluter till databasen och kör TRUNCATE-kommandot).

cron ligger dock utanför databaser, vill du ha hjälp med att sätta upp cronjobb föreslår jag att du frågar i Övriga OS, där lär de veta.
Citera
2011-08-15, 23:56
  #4
Medlem
Doktor_Blys avatar
Citat:
Ursprungligen postat av Narkotikov
Hmm, hur skriver du över datan exakt? Kan du skriva ned SQL-kommandot du använder?

Hur som helst så låter det som att du är ute efter UPDATE-kommandot.
Kod:
update table column1=value, column2=value where column3=value

http://www.w3schools.com/sql/sql_update.asp
Är inte säker på de exakta kommandona då jag använder ett externt statistikprogram som inte jag programmerat för att skapa tabellerna mm, jämför med ett CMS som automatiskt skapar tabeller i en databas man endast anger ett prefix för. Kan ta reda på de exakta kommandon som används för att skapa databasen om det är nödvändigt, men tror personligen inte detta hjälper mig eftersom jag helst fixar till detta direkt via MySQL, eventuellt med hjälp av PHP, men vill göra allt för att slippa mata in allt (manuellt) i databasen på nytt.

Citat:
Ursprungligen postat av Proton
För att kasta ut ALL data ur en tabell och nollställa evenuella autoincrements man har kan man använda kommandot
Kod:
TRUNCATE TABLE myTable 
som när det körs omedelbart kommer nollställa tabellen.

För att köra detta en gång per minut rekommenderar jag att du tar en titt på cron (som du kan använda för att starta ett php-script varje minut som ansluter till databasen och kör TRUNCATE-kommandot).

cron ligger dock utanför databaser, vill du ha hjälp med att sätta upp cronjobb föreslår jag att du frågar i Övriga OS, där lär de veta.
Detta låter intressant, ska kolla runt i forumet om jag hittar information om cron (aldrig hört talas om detta innan), även om jag tycker att det är helt relevant att posta i denna tråd då MySQL och PHP går hand i hand såpass mycket, men du har rätt i att det inte handlar om databaser kort och gott. Några frågor kring detta är: Själva tabellnamnen samt de inställda varchar'sen mm försvinner inte vid en sådan handling hoppas jag? Är bara själva innehållet jag vill "prune:a", så endast den absolut senaste versionen presenteras på webbplatsen.
Citera
2011-08-16, 00:32
  #5
Medlem
Narkotikovs avatar
Citat:
Ursprungligen postat av Doktor_Bly
Är inte säker på de exakta kommandona då jag använder ett externt statistikprogram som inte jag programmerat för att skapa tabellerna mm, jämför med ett CMS som automatiskt skapar tabeller i en databas man endast anger ett prefix för. Kan ta reda på de exakta kommandon som används för att skapa databasen om det är nödvändigt, men tror personligen inte detta hjälper mig eftersom jag helst fixar till detta direkt via MySQL, eventuellt med hjälp av PHP, men vill göra allt för att slippa mata in allt (manuellt) i databasen på nytt.

Hur du skapar tabellerna och databaserna är irrelevant, jag undrade bara hur du lagrar information i kolumnerna. Det jag ville få fram var ifall du skickade över data på korrekt sätt.

Citat:
Ursprungligen postat av Doktor_Bly
Detta låter intressant, ska kolla runt i forumet om jag hittar information om cron (aldrig hört talas om detta innan)

CRON används i Linux för att köra program enligt vissa tider.
http://en.wikipedia.org/wiki/Cron

Citat:
Ursprungligen postat av Doktor_Bly
Själva tabellnamnen samt de inställda varchar'sen mm försvinner inte vid en sådan handling hoppas jag? Är bara själva innehållet jag vill "prune:a", så endast den absolut senaste versionen presenteras på webbplatsen.

Ja, hela tabellen rensas. Jag rekommenderar att du använder UPDATE, som jag nämnde tidigare.
Med risk för att låta otrevlig så vill jag påpeka att du hittar svaren på majoriteten av dina frågor om du använder google eller någon dokumentation.
Citera
2011-08-16, 06:07
  #6
Medlem
blackadder1s avatar
Jag förstår inte riktigt problemet. Varför kan du inte bara hämta den senast inlagda raden till din sida? Det är ju inga problem för databasen att hantera en ny rad i minuten.
Citera
2011-08-16, 06:20
  #7
Moderator
Protons avatar
Citat:
Ursprungligen postat av Doktor_Bly
Är inte säker på de exakta kommandona då jag använder ett externt statistikprogram som inte jag programmerat för att skapa tabellerna mm, jämför med ett CMS som automatiskt skapar tabeller i en databas man endast anger ett prefix för. Kan ta reda på de exakta kommandon som används för att skapa databasen om det är nödvändigt, men tror personligen inte detta hjälper mig eftersom jag helst fixar till detta direkt via MySQL, eventuellt med hjälp av PHP, men vill göra allt för att slippa mata in allt (manuellt) i databasen på nytt.


Detta låter intressant, ska kolla runt i forumet om jag hittar information om cron (aldrig hört talas om detta innan), även om jag tycker att det är helt relevant att posta i denna tråd då MySQL och PHP går hand i hand såpass mycket, men du har rätt i att det inte handlar om databaser kort och gott. Några frågor kring detta är: Själva tabellnamnen samt de inställda varchar'sen mm försvinner inte vid en sådan handling hoppas jag? Är bara själva innehållet jag vill "prune:a", så endast den absolut senaste versionen presenteras på webbplatsen.
Använder du TRUNCATE kommer tabellen nollställas, all data och alla autoincrement kommer nollställas, sedan är det precis som du säger bara att fylla på med ny data, alla kolumner och alla tabelldefinitioner finns ju var. Enkelt kan man ju säga att TRUNCATE kommer nollställa din tabell till läget den var i precis efter det att den skapats från första början.
Citera
2011-08-16, 10:35
  #8
Medlem
Doktor_Blys avatar
Citat:
Ursprungligen postat av Narkotikov
CRON används i Linux för att köra program enligt vissa tider.
http://en.wikipedia.org/wiki/Cron
Tackar. Läste på lite hur man skulle kunna göra en liknande funktion i Windows. Fick till en halvdan lösning via Scehalagda aktiviteter, nackdelen är dock att min webbläsare öppnas en gång per minut vilket inte är särskilt trevligt med tanke på att jag just nu kör webbserver och workstation på samma dator. Möjligen lite OT, men någon som vet någon annan metod för detta under windows där jag slipper stänga ner webbläsarfönstret varje gång scriptet körs?

Citat:
Ursprungligen postat av Narkotikov
Ja, hela tabellen rensas. Jag rekommenderar att du använder UPDATE, som jag nämnde tidigare.
Med risk för att låta otrevlig så vill jag påpeka att du hittar svaren på majoriteten av dina frågor om du använder google eller någon dokumentation.
Som jag skrev tidigare sköts inmatningarna av ett externt program, det är alltså inte jag som styr inputsen vid uppdateringar i statistiken, kan därför inte använda UPDATE syntaxet, annars hade detta varit ultimat. Använder alltid Google som första källa, men efter nära en timmes googling utan tillfredsställande svar så anser jag att chansen är större att få hjälp här på Flashback.

Citat:
Ursprungligen postat av blackadder1
Jag förstår inte riktigt problemet. Varför kan du inte bara hämta den senast inlagda raden till din sida? Det är ju inga problem för databasen att hantera en ny rad i minuten.
Jag är osäker på hur jag gör detta då jag endast arbetat med array förr (just denna fil är inget array, men kommandot array fungerar ju, dock blir det ju problem då den presenterar även den gamla datan). En annan anledning till att jag vill rensa gammal information är ju givetvis att databasen börjar äta onödigt utrymme efter ett tag.

Citat:
Ursprungligen postat av Proton
Använder du TRUNCATE kommer tabellen nollställas, all data och alla autoincrement kommer nollställas, sedan är det precis som du säger bara att fylla på med ny data, alla kolumner och alla tabelldefinitioner finns ju var. Enkelt kan man ju säga att TRUNCATE kommer nollställa din tabell till läget den var i precis efter det att den skapats från första början.
Tack för hinten, la just upp en testdatabas och körde TRUNCATE TABLE via en PHP fil och detta fungerar exakt som jag vill ha det . Nu återstår bara problemen med att få cron:en att fungera tillfredsställande under Windows, som jag skrev ovan som svar på Narkotikov's citat så är "scemalagda aktiviteter" inget att föredra för en dator som även används som workstation. Det andra jag kan tänka mig blir lite klurigt är att få php-filen att köras ~samtidigt som ny information skickas till databasen, så det inte bara är låt säga 2 sekunder kvar innan filen körs efter det att informationen skickats till databasen, då kommer ju användaren mötas av en tom tabell på hemsidan under 98% av tiden.
Citera
2011-08-16, 17:16
  #9
Medlem
blackadder1s avatar
Nu är inte jag så bevandrad inom php men tar inte 'mysql_fetch_array' en SQL-query? Rätt sätt att lösa uppgiften är att välja ut den senaste posten. Om du sen tycker att databasen tar upp onödigt mycket plats så är det ju bara att trunkera tabellen med jämna mellanrum mha av cron eller nåt annat.
EDIT.
Vill du inte spara datan så anser jag att det inte är en databas du ska använda. Exportera din data till ett textdokument eller liknande.
__________________
Senast redigerad av blackadder1 2011-08-16 kl. 17:19.
Citera
2011-08-16, 17:34
  #10
Medlem
Doktor_Blys avatar
Citat:
Ursprungligen postat av blackadder1
Nu är inte jag så bevandrad inom php men tar inte 'mysql_fetch_array' en SQL-query? Rätt sätt att lösa uppgiften är att välja ut den senaste posten. Om du sen tycker att databasen tar upp onödigt mycket plats så är det ju bara att trunkera tabellen med jämna mellanrum mha av cron eller nåt annat.
Korrekt. mysql_fetch_array hämtar information från ett SQL-array. Det jag undrade i min förra post var ju hur jag väljer ut den senaste posten via PHP.


Citat:
Ursprungligen postat av blackadder1
Vill du inte spara datan så anser jag att det inte är en databas du ska använda. Exportera din data till ett textdokument eller liknande.
Detta var ett konstigt argument. Varför ska jag spara data som inte används längre? Har bara användning av att spara datan 1 minut åt gången, innan det räknas som gammalt och förbrukat, inte längre användbart. Då det gäller statistik för inloggade spelare (just nu) på en server så har jag knappast någon användning av tidigare statestik. Ny statestik läggs in en gång per minut, och ska således visa denna information på webbplatsen, de gamla inputsen är totalt ointressant vid detta användningsområde. Då jag vill visa "relativt" live-statistik på webbplatsen så förstår jag inte alls varför du rekommenderar textdokument, vilken användare ser sina game-stats i textdokument år 2011? Tack hur som helst för svar!
Citera
2011-08-16, 22:49
  #11
Medlem
blackadder1s avatar
Vad jag menar är att du från ditt statistikprogram istället för att skriva till en databas skriver till en textfil som du sedan läser in i via php. En databas ska användas för att lagra data, det är ju inte riktigt det du vill göra.
Om du nu prompt vill använda en databas så skulle det underlätta om du berättade hur din tabell där du lagrar datan ser ut. Efter det kan jag hjälpa dig att ta fram den senaste posten.
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback