Minulla on kehitteillä tietokantasovellus, jonka on järjestettävä käyttäjälle näytettävät taulukon rivit melko monimutkaisella tavalla. Ajattelin tehdä sen erillisellä järjestys -sarakkeella, joka päivitetään joka kerta, kun tietokantaan syötetään uutta tietoa. Sitten aloin epäillä, että päivitys kestää kauan, koska päivitettäviä rivejä voi olla helposti lähemmäs sata.
Kuinka kauan päivitys mahataisi kestää tälläisellä max. sadan rivin määrällä?
Pystyykö järjestelyn tekemään taulukkoa tulostaessa, muutenkin kuin order by:n avulla?
Järjestyssysteemistä sen verran, että sen on otettava joissain tapauksissa huomioon jopa yksitoista eri saraketta.
Sata riviä on todella pieni määrä ja toimii nopeasti ratkaisusta riippumatta. Toki lisäsarakkeesta voi olla hyötyä siinä tapauksessa, että hakuja tehdään suuria määriä ja muutoksia vain harvoin.
ORDER BY on ainoa tapa järjestelyyn, mutta en ymmärrä, miksi tällä olisi kysymyksesi kannalta mitään merkitystä. Voit joka tapauksessa kirjoittaa siihen ihan samanlaisia lausekkeita kuin ylimääräisen sarakkeen päivittämiseenkin.
Siis uutta tietoa lisättäessä päivitetään satakunta riviä? Miksi? Kuinka monta riviä taulussa on yhteensä?
Pyri tekemään sovellus niin, että vain lisätty/muuttunut rivi muutetaan, ei muita. Mahdollisesti lisää uusi (esim. VARCHAR-tyyppinen) kenttä, johon koostat järjestysavaimen. Vai voiko myös samana pysyvien rivien keskinäinen järjestys muuttua, kun lisäät uuden rivin?
Niinkauan kun sarakkeessa, jonka mukaan järjestely on tehtävä, on joka rivillä eri arvo, ovat asiat hyvin. Mutta jos on kaksi riviä, joilla on sama arvo, on ne silti saatava järjestykseen. Tällöin siirrytään tutkimaan kymmentä muuta saraketta. Näistä sarakkeista on laskettava tiettyjen numeroiden esiintyvyyttä.
Voiko tämän tehdä muuten, kuin apusarakkeen avulla? Voiko ORDER BY:tä käyttää tälläisessä järjestelyssä?
Antamillasi lähtötiedoilla on paha antaa tyhjentävää vastausta.
Sinänsähän order by:lle voi määritellä useita sarakkeita, eli jos ensimmäinen sarake on kahdelle riville sama, niin sitten seuraava(t) sarake määrittää niiden keskinäisen järjestyksen.
Järjestely olisi sellainen, että saman arvon sattuessa laskettaisiin nollat kymmenestä muusta sarakkeesta. Tästä sitten se, jolla on enemmän nollia jäisi järjestelyssä toiseksi. Mikäli nollia ei ole siirryttäisiin ykköseen jne.
Tämä ei taida ORDER BY:llä onnistua?
Eikö se oo sama antaa niille riveille joku järjestysluku aina joka lasketaan niitä päivittäessä, esim nollien, ykkösien jne määrästä koostuva. Eihän sitä tartte päivittää sitten ko silloin kun se sinne kantaan lisätään tai muutetaan, eikai sitä 100 riviä muutu samaan aikaan. Aika outo tuo laskutapa tuossa muutenki, eikö sitä koodia voi suoraa laittaa tai taulukkoa tänne näkyville.
Saa tuon pelkällä order by:lläkin tehtyä. Syntaksi riippuu tietokantamoottorista.
Lisäisin sinne kuitenkin apusarakkeen Nollia, jolloin order by olisi yksinkertaisesti: ORDER BY pääsarake, nollia
Nollia-saraketta sitten päivitettäisiin kun rivin nollia sisältäviä sarakkeita päivitetään. Jos koodia ei voida/haluta muuttaa niin esim. triggerillä.
Koodia ei voi laittaa tänne, koska sitä ei vielä ole. Yritän tässä pähkäillä sitä, että miten sen järjestelyn teen.
Jos on ORDER BY pääsarake, apusarake, niin voiko apusarakkeessa olla kahdella rivillä sama arvo, jos rivien pääsarakkeessa on eri arvo.
Esim.
pää apu
2. 1.
2. 2.
3. 1.
3. 2.
Menisivätkö nuo sitten tuohon järjestykseen?
oukki kirjoitti:
Menisivätkö nuo sitten tuohon järjestykseen?
Kyllä. Ensisijaisesti järjestetään pääsarakkeen mukaan, ja vain jos niiden arvot ovat yhtäsuuret, verrataan apusarakkeen arvoja.
Aihe on jo aika vanha, joten et voi enää vastata siihen.