MySQL

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?
10377
Äänestä

Muut lukivat myös

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.

Äänestä
  • Mutta kun on olemassa auto_increment, niin kai jotain tällaistakin olisi voinut olla?

    Äänestä

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? ;)

Äänestä
  • 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?

    Äänestä

  • mie kirjoitti:

    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 :)

    Äänestä

  • minä kirjoitti:

    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.

    Äänestä

  • mie kirjoitti:

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

    Äänestä

  • nyora kirjoitti:

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

    Äänestä

  • mie kirjoitti:

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

    Äänestä

  • nyora kirjoitti:

    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.

    Äänestä

Kommentoi aloitusta


mie kirjoitti:

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?

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