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

873

    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. Ensi kesänä

      Näin kesän viimeisenä minuutteina ajattelen sinua. Olisiko seuraava kesä "meidän" kesä? Tänä vuonna ei onnistuttu, mutta
      Ikävä
      70
      3550
    2. Anne Kukkohovin karmeat velat ovat Suomessa.

      Lähtikö se siksi pois Suomesta ? Et on noin kar? mean suuret velat naisella olemassa
      Kotimaiset julkkisjuorut
      148
      3503
    3. Tukalaa kuumuutta

      Tietäisitpä vaan kuinka kuumana olen käynyt viime päivät. Eikä johdu helteestä, vaan sinusta. Mitäköhän taikoja olet teh
      Ikävä
      46
      3322
    4. Sinä, ihastukseni

      Mitä haluaisit tehdä kanssani ensimmäisenä?
      Ihastuminen
      53
      2769
    5. Tiedät ettei tule toimimaan.

      Mielenterveys ei kummallakaan kestä.
      Ikävä
      32
      2036
    6. Okei, myönnetään,

      Oisit sä saanut ottaa ne housutkin pois, mutta ehkä joskus jossain toisaalla. 😘
      Ikävä
      30
      1962
    7. Et siis vieläkään

      Et ilmeisesti ole vieläkään päässyt loppuun asti mun kirjoituksissa täällä. Kerro ihmeessä sit, kun valmista 😁 tuskin k
      Ikävä
      40
      1695
    8. Onko kaivatullasi

      himmeä kuuppa?
      Ikävä
      48
      1676
    9. Mihin hävisi

      Mihin hävisi asiallinen keskustelu tositapahtumista, vai pitikö jonkin Hannulle kateellisen näyttää typeryytensä
      Iisalmi
      96
      1625
    10. On jo heinäkuun viimeinen päivä.

      En taida nähdä sinua koskaan.
      Rakkaus ja rakastaminen
      39
      1390
    Aihe