MySQL kenttien yhdistäminen

SQL

On seuraavanlainen tilanne:

kaksi taulua (p ja m)

p(kentät id, nimi)

id|nimi |
-------------
1|erkki |
2|pekka |

m(kentät id, a1, a2)

id|a1|a2|
---------
1| 2| 2|
2| 1| 1|
3| 1| 2|
4| 2| 3|

Ja pitäisi saada haku, jossa on seuraavat tiedot:

id|nimi |a|
-----------
1|erkki|2|
2|pekka|1|

, jossa siis a sarake on numero 1:sten määrä taulukossa m (erkillä sarakkeessa a1 ja pekalla a2). Kun siis sarakkeessa m.a1 on 2 kappaletta numero 1:stä, niin erkin sarakkeeseen hakutuloksessa tulee 2. Ja pekalla vastaavasti 1.

Seuraavalla haulla molempien rivien arvoksi tulee 3, joka on siis molemmissa sarakkeissa yhteensä oleva ykkösten määrä. (Mikäli en aivan väärin laskenut)

SELECT
p.id AS id,
p.nimi AS nimi,
(SELECT count( * ) FROM m WHERE CONCAT('a', p.id) = 1) AS a
FROM p

Ymmärrän siis (toivottavasti), mikä tässä on väärin, mutta en osaa kirjoittaa oikeanlaista koodia...

Ideoita?

7

822

    Vastaukset

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • I.Proqatlis

      En kyllä ymmärtänyt, mihin tähtäät tuolla kyselyllä. Tämä vaikuttaa olevan jatkoa tuolla aiemmin olleeseen keskusteluun:

      http://keskustelu.suomi24.fi/show.fcgi?category=108&conference=4500000000000137&posting=22000000022243171

      Taulujen ja sarakkeitten nimet ovat tässä nyt sellaisia, että ne eivät kerro hölkkäsen pöläystäkään, mitä niiden sisältönä on.

      Oletan, että m tarkoittaa taulua, johon talletetaan tietoa maaleista. Aiemmassa versiossa olivat sarakkeet tekijä ja syöttäjä, nyt ne ovat muuttuneet a1:ksi ja a2:ksi. Mitä nämä tarkoittavat? Edelleenkin tekijää ja syöttäjää? Miksi esimerkissäsi esiintyy sama numero sarakkeissa a1 ja a2? Sama pelaaja sekä teki että syötti vai mistä oikein on kysymys?

      Sitten sinä ripottelet noita ykkösiä sinne tänne m-tauluun. Miksi? Mitä ykkönen edustaa? Entä kakkoset ja kolmonen? Pelaajanumeroitako? Tarvitsetko sinä oman sarakkeen jokaiselle pelaajalle??

      Jos nyt voisit kertoa, mitä oikein on tarkoitus tehdä, niin voitaisiin antaa vastauksiakin :)

      • Piru_

        ensin paremmin, niin ei joudu tekemään taikatemppuja niiden kyselyiden kanssa.

        Pelaaja
        id|etunimi|sukunimi|joukkue

        Maali
        id|peliid|tekoaika|tekija|syottaja

        Peli
        id|joukkue1|joukkue2|paivamaara|kentta

        Joukkue
        id|nimi|valmentaja

        tollasesta vois jo tehdäkin jotain hakuja. Eli ensin hieman mietiskelyä sen kannan suhteen ja sen jälkeen onnistuu ne monimutkaisemmatkin haut


      • SQL

        Joo, eli turistinahan täällä näiden MySQL-juttujen kanssa ollaan :)

        Eli joo, jokaisella henkilöllä on oma sarake m-taulussa. Se ei kyllä ole mikään erityisen hyvä tapa käsittääkseni, mutta näin nyt vain on.

        Tässä ei ole kyseessä samanlainen tilanne kuin aiemmassa (viittaamassasi) keskustelussa.

        Ne ykköset, kakkoset ja kolmoset eivät edusta pelaajanumeroita. Niiden voisi tässä ajatella edustavan vaikka esimerkiksi tehtyjä pisteitä tietyssä ottelussa.

        Elikkä siis a1-sarake olisi sen henkilön sarake, jonka id on 1, ja a2-sarake vastaavasti sarake henkilölle 2 (id=2).

        Eli haluan siis laskea yhteen pelaajan yksi tekemät pisteet kaikissa otteluissa ja vastaavasti pelaajan kaksi pisteet jne. ja laittaa ne sitten sinne hakutulokseen yhteen sarakkeeseen eri pelaajien riveille.

        Jokohan tämä selvensi hieman? Vai sekoittiko lisää?


      • I.Proqatlis
        SQL kirjoitti:

        Joo, eli turistinahan täällä näiden MySQL-juttujen kanssa ollaan :)

        Eli joo, jokaisella henkilöllä on oma sarake m-taulussa. Se ei kyllä ole mikään erityisen hyvä tapa käsittääkseni, mutta näin nyt vain on.

        Tässä ei ole kyseessä samanlainen tilanne kuin aiemmassa (viittaamassasi) keskustelussa.

        Ne ykköset, kakkoset ja kolmoset eivät edusta pelaajanumeroita. Niiden voisi tässä ajatella edustavan vaikka esimerkiksi tehtyjä pisteitä tietyssä ottelussa.

        Elikkä siis a1-sarake olisi sen henkilön sarake, jonka id on 1, ja a2-sarake vastaavasti sarake henkilölle 2 (id=2).

        Eli haluan siis laskea yhteen pelaajan yksi tekemät pisteet kaikissa otteluissa ja vastaavasti pelaajan kaksi pisteet jne. ja laittaa ne sitten sinne hakutulokseen yhteen sarakkeeseen eri pelaajien riveille.

        Jokohan tämä selvensi hieman? Vai sekoittiko lisää?

        jos nuo ykköset, kakkoset, kolmoset jne edustavat tehtyjä pisteitä jossain ottelussa, niin miksiköhän sinä haluat tietää niiden OTTELUIDEN MÄÄRÄN, joissa pelaaja teki TASAN YHDEN PISTEEN? Sitähän tuo avauksessa ollut SQL-lause yrittää selvittää!

        Tuossa yllä kuitenkin sanot, että haluat laskea pelaajan nro 1 tekemät pisteet KAIKISSA OTTELUISSA, ei siis vain niissä, joissa saalis oli tasan yksi piste.

        Jos sinä rajaat SQL-kyselyn niin, että vain ykkösiä haetaan, niin miksi taulussa sitten on kakkosia ja kolmosia, jos ne ovat kyselyn kannalta yhdentekeviä??


      • SQL
        I.Proqatlis kirjoitti:

        jos nuo ykköset, kakkoset, kolmoset jne edustavat tehtyjä pisteitä jossain ottelussa, niin miksiköhän sinä haluat tietää niiden OTTELUIDEN MÄÄRÄN, joissa pelaaja teki TASAN YHDEN PISTEEN? Sitähän tuo avauksessa ollut SQL-lause yrittää selvittää!

        Tuossa yllä kuitenkin sanot, että haluat laskea pelaajan nro 1 tekemät pisteet KAIKISSA OTTELUISSA, ei siis vain niissä, joissa saalis oli tasan yksi piste.

        Jos sinä rajaat SQL-kyselyn niin, että vain ykkösiä haetaan, niin miksi taulussa sitten on kakkosia ja kolmosia, jos ne ovat kyselyn kannalta yhdentekeviä??

        Sorry sorry.

        Edellisen viestini voi aika pitkälti unohtaa.

        Eli siis unohdin jo, että mitä itse asiassa haluan. Haluan siis laskea siihen haun riville, jossa on id=1 sarakkeeseen numero ykkösten määrän m-taulun sarakkeesta a1 ja ykkösten määrän haun riville id=2 m-taulun sarakkeesta a2 jne.

        Eli tätä tolla ensimmäisessä viestissä olevalla koodilla yritän saada.

        Pahoitteluni sekaannuksesta...


      • I.Proqatlis
        SQL kirjoitti:

        Sorry sorry.

        Edellisen viestini voi aika pitkälti unohtaa.

        Eli siis unohdin jo, että mitä itse asiassa haluan. Haluan siis laskea siihen haun riville, jossa on id=1 sarakkeeseen numero ykkösten määrän m-taulun sarakkeesta a1 ja ykkösten määrän haun riville id=2 m-taulun sarakkeesta a2 jne.

        Eli tätä tolla ensimmäisessä viestissä olevalla koodilla yritän saada.

        Pahoitteluni sekaannuksesta...

        Tässä on yksi paha vika, sinä nimittäin yrität kääntää päälaelleen relaatiotietokannan perusasioita eli kuinka taulut ovat suhteessa toisiinsa.

        Jos meillä on kaksi taulua, vaikkapa aiemman jutun pelaajat ja maalit, joissa molemmissa on pelaajan numero, niin tätä numeroa voidaan käyttää yhdistämään tietty pelaajataulun RIVI johonkin (tai monikossa joihinkin) maalit-taulun RIVEIHIN, ei sarakkeisiin! Tässä sinä kuitenkin yrität yhdistää pelaajataulun RIVIN maalit-taulun SARAKKEESEEN, mikä minun mielestäni on katastrofaalinen virhe.

        Ajattelepa tätä: sinulla on 20 pelaajaa pelaajataulussa. Sitten olisi näitä vastaavat sarakkeet a1, a2, ... , a20 maalit-taulussa. Jos sinä lisäät systeemiin yhden pelaajan, sinun pitää lisätä yksi sarake maalit-tauluun, siis alter table add column ... Se nyt on aivan idiootti ratkaisu, että aina kun uusi pelaaja lisätään, niin johonkin tauluun pitäisi samalla lisätä uusi sarake.

        Aiemman jutun taulut, pelaajat ja maalit, olivat hyvässä suhteessa toisiinsa. Mikset voisi lisätä tarvitsemiasi tietoja sinne?

        Enkä vieläkään ymmärtänyt, miksi sinä haluat laskea jossain sarakkeessa olevat ykköset. Mitä nuo kakkoset ja kolmoset sitten ovat...


      • SQL
        I.Proqatlis kirjoitti:

        Tässä on yksi paha vika, sinä nimittäin yrität kääntää päälaelleen relaatiotietokannan perusasioita eli kuinka taulut ovat suhteessa toisiinsa.

        Jos meillä on kaksi taulua, vaikkapa aiemman jutun pelaajat ja maalit, joissa molemmissa on pelaajan numero, niin tätä numeroa voidaan käyttää yhdistämään tietty pelaajataulun RIVI johonkin (tai monikossa joihinkin) maalit-taulun RIVEIHIN, ei sarakkeisiin! Tässä sinä kuitenkin yrität yhdistää pelaajataulun RIVIN maalit-taulun SARAKKEESEEN, mikä minun mielestäni on katastrofaalinen virhe.

        Ajattelepa tätä: sinulla on 20 pelaajaa pelaajataulussa. Sitten olisi näitä vastaavat sarakkeet a1, a2, ... , a20 maalit-taulussa. Jos sinä lisäät systeemiin yhden pelaajan, sinun pitää lisätä yksi sarake maalit-tauluun, siis alter table add column ... Se nyt on aivan idiootti ratkaisu, että aina kun uusi pelaaja lisätään, niin johonkin tauluun pitäisi samalla lisätä uusi sarake.

        Aiemman jutun taulut, pelaajat ja maalit, olivat hyvässä suhteessa toisiinsa. Mikset voisi lisätä tarvitsemiasi tietoja sinne?

        Enkä vieläkään ymmärtänyt, miksi sinä haluat laskea jossain sarakkeessa olevat ykköset. Mitä nuo kakkoset ja kolmoset sitten ovat...

        Joo, tätä olen vähän ajatellutkin. Eli kaipa sitten täytyy vaihtaa tietokannan rakennetta.

        Kiitos kommenteista. Tässä sitä oppii koko ajan lisää tästä asiasta.

        Mutta siis tuo ykkösten etsiminen on vain esimerkki. Voi olla, että jossain tilanteessa haluaisin etsiä kaikki kakkoset tai jopa kolmoset.


    Ketjusta on poistettu 0 sääntöjenvastaista viestiä.

    Luetuimmat keskustelut

    1. Tärkeä kysymys!

      Haluatko sinä, mies, minut?
      Ikävä
      91
      1445
    2. Asiallinen lähestyminen

      Mitä on asiallinen lähestyminen?? Tietääkö tai tajuaako kukaan, varsinkaan miehet??? Eilen NELJÄNNEN kerran jouduin isk
      Sinkut
      154
      1137
    3. En tiedä..

      Yhtään minkälainen miesmaku sinulla on. itse arvioin sinua moneenkin otteeseen ja joka kerta päädyin samaan lopputulokse
      Ikävä
      103
      1020
    4. Jennika Vikman avoimena - Isosisko Erika Vikman ohjeisti napakasti Tähdet, tähdet -kisaan: "Älä.."

      Jennika ja Erika - niin ovat kuin kaksi marjaa! Ilmeiltään, ääneltään ja eleiltään hyvinkin samanlaiset - toinen on kyll
      Suomalaiset julkkikset
      15
      877
    5. Mitäs nainen

      Meinaat tehdä viikonloppuna.
      Ikävä
      82
      850
    6. Suhde asiaa

      Miksi et halua suhdetta kanssani?
      Ikävä
      64
      760
    7. Milloin viimeksi näit ikäväsi kohteen?

      Oliko helppo tunnistaa hänet? Millaisia tunteita tuo näkeminen herätti sinussa?
      Ikävä
      40
      747
    8. Vedalainen metafysiikka

      Termi ”metafysiikka” kuuluu Aristoteleelle. Metafysiikka tarkoittaa ”fysiikan jälkeen” eli tietoa siitä, mikä on tavalli
      Hindulaisuus
      289
      733
    9. Ai jaa sinä oletkin ahnas

      Ja romanttinen luonne, nyt vasta hiffasin että olet naarastiikeri. Parempi myöhään kuin ei milloinkaan.
      Ikävä
      107
      728
    10. En oikeastaan usko että sinä tai kukaan

      Olisi oikeasti ihastunut tai rakastunut. Se on joku harhakuva joka minusta miehestä syntyi. Ja kun se särkyy, niin "tunt
      Ikävä
      44
      692
    Aihe