Miten selville?

Jos haen tietokannasta esim kaikki viestit tietyltä palstalta:

"SELECT * FROM forum WHERE forumid=1"

Tämä hakee kaikki viestit, mutta sivulle mahtuu vain 20 viestiä.

Sivun alla on linkit seuraaville sivuille:

Sivu: [1] [2] [3] [4]

Joten jos haluan vain sivun 3 viestit haen siis:

"SELECT * FROM forum WHERE forumid=1 LIMIT 40, 20"

Mutta jotta voisin tehdä tuon linkkivalikon muille sivuille, minut pitäisi tietää montako viestiä on palstalla yhteensä.

Joten onko ainoa keino saada tämä tieto siis ensin hakea kaikki viestit, ja tämän jälkeen LIMIT:illa rajoitetun määrän?

Tämä on mielestäni aika tehotonta, joten onko muita vaihtoehtoja?
3285
Äänestä

Muut lukivat myös

Vastaukset 3

Vanhimmat

Ei missään nimessä kaikkia viestejä ellet niitä tartte. Teet ihan perinteisen count kyselyn.

SELECT COUNT(*) FROM forum WHERE forumid = 1

Ja mikäli kanta on oikein indeksoitu niin rivimäärän tieto löytyy suoraan indeksistä eikä tartte erikseen laskea, nopeaa ja tehokasta.


Varmaan tiedätkin, ettei tähtiä kannata käyttää muutakuin esimerkeissä, joten luettele sarakkeet.

Äänestä
  • >...tiedätkin, ettei tähtiä kannata käyttää...

    Eikös Count(1) anna ihan saman tuloksen ja pienemmällä kuormalla ?

    Äänestä

  • Ambrla kirjoitti:

    >...tiedätkin, ettei tähtiä kannata käyttää...

    Eikös Count(1) anna ihan saman tuloksen ja pienemmällä kuormalla ?

    *Eikös Count(1) anna ihan saman tuloksen ja pienemmällä kuormalla ?*

    Sanoin myös

    *Ja mikäli kanta on oikein indeksoitu niin rivimäärän tieto löytyy suoraan indeksistä eikä tartte erikseen laskea, nopeaa ja tehokasta.*

    Ellen ihan väärin muista niin * countissa antaa tuloksen sieltä mistä sen kannan optimoijan mukaan nopeiten saa. Eikä siis laske jokaista saraketta erikseen, niitähän on sama määrä.

    Selectissä tähdellä on suurikin merkitys silloin liikutellaan useinmiten turhaa dataa. Tässä tapauksessa kannalta tulee vain rivimäärän tieto käytettiin sitten tähteä tai ei.


    Tulipahan testattua yli kahdenmiljoonan rivin kannalla molemmat tavat yhtänopeita. 20000 kyselyn testi scripti menee läpi 5.3 - 5.4sek käytti kumpaa tahansa.

    Äänestä

Kommentoi aloitusta


MySQL kysäri kirjoitti:

Jos haen tietokannasta esim kaikki viestit tietyltä palstalta:

"SELECT * FROM forum WHERE forumid=1"

Tämä hakee kaikki viestit, mutta sivulle mahtuu vain 20 viestiä.

Sivun alla on linkit seuraaville sivuille:

Sivu: [1] [2] [3] [4]

Joten jos haluan vain sivun 3 viestit haen siis:

"SELECT * FROM forum WHERE forumid=1 LIMIT 40, 20"

Mutta jotta voisin tehdä tuon linkkivalikon muille sivuille, minut pitäisi tietää montako viestiä on palstalla yhteensä.

Joten onko ainoa keino saada tämä tieto siis ensin hakea kaikki viestit, ja tämän jälkeen LIMIT:illa rajoitetun määrän?

Tämä on mielestäni aika tehotonta, joten onko muita vaihtoehtoja?

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu