Voiko jonkun solun arvona olla SQL käsky/haku?
Esim. solun arvona olisi toisen taulukon jonkun sarakkeen MAX arvo? Joka sitten päivittyy automaattisesti jos siihen sarakkeeseen lisätään tai sieltä poistetaan rivit? Vai pitäkö se ohjelmoida käsiin?
Esim. solun arvona olisi toisen taulukon jonkun sarakkeen MAX arvo? Joka sitten päivittyy automaattisesti jos siihen sarakkeeseen lisätään tai sieltä poistetaan rivit? Vai pitäkö se ohjelmoida käsiin?
Vastaukset 10
Vanhimmat
Jospa kertoisit tarkemmin mitä olet tekemässä ja mihin tuollaista tarvitset, ehkäpä sitten joku osaisi antaa apua.
Ja vastaus (jonka olisit toki itsekin vähäisellä googletuksella löytänyt): Ei.
Ylipäältään tietokantaan on normaalitapauksissa tarpeetonta tallentaa laskettavia arvoja.
Mutta kun on olemassa auto_increment, niin kai jotain tällaistakin olisi voinut olla?
Anteeksi en pysty todellakaan käsittämään mihin tällaista tarvitset. Noh, yritän kuitenkin.. Haluat siis että taulussa a, sarakkeen k solujen sisältö on taulun b sarakkeen l suurin arvo?
Tässä tapahtuu tarpeetonta monistamista A) koska sama arvo olisi taulun a sarakkeen k jokaisessa solussa. B) Koska kyseessä on johdettava arvo jota ei tarvitse tallettaa mihinkään.
Sitäpaitsi jos taulun B joku solu sarakkeesta l muuttuisi niin että siitä tulisi sarakkeen suurin arvo, se pitäisi taas erikseen päivittää taulun A sarakkeen k jokaiseen soluun.
Auttoiko? ;)
Ajattelin vaikka jotain tällaista: (ihan päästä keksitty)
Taulu1: Keskustelualueet (id,otsikko,viestejayht)
Taulu2: Viestit(id,idalue,teksti)
ja "viestejayht" on siis "Viestit" taulun rivien määrä, missä "idalue" on sama kuin "Keskustelualueet" "id".
Eli jos lisään uuden viestin, niin pitää samalla päivittää "Keskustelualueet" taulun "viestejayht", mutta jos se laskisi ne automaattisesti, niin ei tarvitsisi.
Ymmärsikö joku?
No ekanakaan elä käytä mitään MAX viritystä tuohon. Käytä "SELECT COUNT" kyselyä ennemmin. Googleen hakuun "mysql select count" tms niin varmaan löytyy paljon hyviä esimerkkejä.
Hakujakin voit yhdistää mikä voi osoittautua käteväksi tähän sinun ongelmaasi. Mutta nyt olen niin väsynyt etten jaksa miettiä miten;). Siinäpä onkin mukava pähkinä sinulle purtavaksi. Jätä tuo viestejäyht -sarake pois. Sen sarakkeen tiedot saat haluamallasi tavalla näkyviin oikealla haulla - luulen :)
Ei tietenkään mitään MAX, se on ollut yhtä toista projektia varteen.
Ja jos otan tämän "viestejäyht" pois, niin voi kuvitella kauanko kestää keskustelualuelistauksen tekeminen, (jos ryhmiä on kymmeniä ja viestejä kymmeniätuhansia) jokaiselle ryhmälle oman haun tekeminen missä lasketaan viestien määrät, niin uskon että tehokaskin palvelin on kohta nurin. Ei hyvä, ei.
select count(*) from TAULU;
kestää (koitin taulua, jossa on 4500 tietuetta..) noin 0,00 sec
eli eipä siinä kauaa nokka tuhissu...
sinä laskit taulukon kokonaisrivimäärän, se ei vertailut jokaisen rivin id saraketta idalue arvoon. tämä kestää huomattavasti kauemmin, ja jos alueita on kymmeniä ja useampi käyttäjä käyttää sitä samanaikaisesti, niin kyllä se kestää.
select count(*) from Viestit, Keskustelualueet where Viestit.idalue = Keskustelualueet.id;
Ei tossakaan kauaa mee..
jollei kelpaa, niin laita siihen viestin syöttöön sitten samalla joku, mikä lisää aina yhden siihen Keskustelualueet.viestejayht kenttään..
Tai harkitse jotain jouhevampaa toteutusta..
Niin teet jonkun stored proceduren jolla ne viestit laitetaan kantaan ja joka automaagisesti tekee tarvittavan paivityksen siihen kenttaan jossa on lukumaarat.