Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Mysql: maksimi määrä tietueita yhdellä id:llä

Pallo [25.06.2008 02:55:18]

#

Olen tekemässä sivulleni kommentointi skriptaa joka käyttää mysliä kommenttien tallennukseen. Koska sivuja jossa kommentointi on käytössä on paljon, kasaantuu kommentteja erittäin paljon. Jokaisella sivulla on oma id, ja sivun kommenttien tietoihin tallennetaan tämä id.

Nyt pitäisi saada toteutettua viritelmä joka sallisi maksimissaan 10 tietyn id:n
kommenttia taulussa. Kun käyttäjä lisää kommentin, skriptin pitäisi tarkistaa että onko kommentteja enemmän kuin 10 => jos on, poistetaan vanhemmat kommentit ja säilytetään 10 uusinta kommenttia.

Onko tälläinen järkevä tehdä säästääkseen tilaa? Olisiko jollakin antaa käytännön esimerkkiä miten tälläinen kannattaisi toteuttaa?

Teuro [25.06.2008 07:27:36]

#

Lyhyt vastaus voisi kuulua jotenkin, että ei kannata lähteä poistamaan kannasta tilanpuutteen vuoksi. Tietokantamoottori selviää hyvin noista kommenteista, jos sinulla on liian vähän tilaa palvelimella suosittelen hieman isomman ostamista. Kannalle muutama kymmenen tuhatta riviä ei tunnu missään ja vasta noin miljoonien rivien kohdalla puhutaan vakavasti tietokannoista. Tuskin kommentointijärjestelmä tuottaa kuitenkaan edes lähellekään noin isoja rivimääriä.

Kommenttien poistaminen tosin on helppoa, jos sen välttämättä haluat tehdä, mutta järkevämpi voisi olla, että ensin näytetään vaikkapa 10 tuoreinta kommenttia. Kommenttien alle vain linkki, josta aukeaa loputkin. Olisiko tällaisesta ideasta mihinkään?

<?php
$tuoreimmat = mysql_query("SELECT tunnus, kommentti FROM kommentit LIMIT 10");
?>

Kaikki kommentit haettaisiin ilman LIMIT määrettä.

ajv [25.06.2008 08:08:29]

#

Kuvittelin, että seuraava triggeri olisi ajanut asian, mutta MySQL näyttää tukevan LIMIT-ehtoa alikyselyssä vasta versiosta 6 eteenpäin...

CREATE TRIGGER commentdropper AFTER INSERT ON comments
   FOR EACH ROW BEGIN
      DELETE FROM comments WHERE Id IN(SELECT Id FROM comments WHERE pic_id = NEW.pic_id ORDER BY Id DESC LIMIT 10,1);
   END;

Mutta tosiaan, kuten Teuro mainitsi, kyllä niitä rivejä saa olla satoja tuhansia ennen kuin tietokanta alkaa yskimään.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta