Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Monimutkainen järjestys

Sivun loppuun

oukki [20.03.2012 18:16:25]

#

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.

Metabolix [20.03.2012 18:23:08]

#

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.

Chiman [20.03.2012 18:43:02]

#

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?

oukki [20.03.2012 21:05:01]

#

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ä?

Grez [20.03.2012 21:09:09]

#

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.

oukki [21.03.2012 07:59:26]

#

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?

Synomi [21.03.2012 08:21:44]

#

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.

Grez [21.03.2012 08:35:01]

#

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ä.

oukki [21.03.2012 10:46:46]

#

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?

Chiman [21.03.2012 10:56:08]

#

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.


Sivun alkuun

Vastaus

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

Tietoa sivustosta