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

899

    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. Kiva kun SDP alkaa hallitsemaan Suomea

      Vanhat hyvät ajat taas palaavat ja kansa vaurastuu. Muistatteko vielä Sorsan aikakauden? Silloin Suomessa tehtiin jopa
      Maailman menoa
      153
      4829
    2. SDP:n lyhyt selviytymisopas

      1. Komitea on vastaus, oli kysymys mikä tahansa Jos maailma on muuttumassa tai jossain palaa, demari ei hätiköi. Ensin p
      Maailman menoa
      76
      3995
    3. Keskisen kyläkaupassa Temun vaatteita myynnissä?

      Siis mitä? Miksi siis ei itse tilaisi Temusta samoja.
      Maailman menoa
      73
      2695
    4. SÄHKÖLASKU 1600 EUROA Ei tässä ole mitään järkeä

      https://www.is.fi/taloussanomat/art-2000011804443.html Kyllä täysin huijausta nämä sähkömarkkinat. Varsinkin pörssisähk
      Maailman menoa
      230
      2118
    5. Toivoisitko

      Toivoisitko, että kaivattusi olisi introvertimpi tai extrovertimpi? Itsenäinen tai tarvitsisi enemmän apua/sinua? Osoit
      Ikävä
      120
      1948
    6. Venäläiset varkaudessa

      Ja venäjä mieliset. Teitä kiinnostaa toisinajattelijat ja trafikista päätellen aika paljonkin. Kunhan aika koitaa tulee
      Varkaus
      246
      1227
    7. Lupajaoston esityslista

      Ilmoitus rakennusvalvonntaan luvattomasta rakentamisesta. esityslistan 6pykälä Kyse on kulttuuritalon rakentamisesta jo
      Pyhäjärvi
      49
      865
    8. Haluaisitko kaivattusi

      kanssa ensiksi seksiä ja sen jälkeen puhumista?
      Ikävä
      62
      806
    9. Jorma Uotinen UMK-juontajaksi! Mitä ajatuksia UMK-pesti herättää?

      Professori, laulaja, koreografi ja TTK-tuomari Jorma Uotinen, 75, on yksi tämän vuoden UMK-juontajista. Uotisen rinnall
      Euroviisut
      24
      795
    10. Unelmoitko asumisesta ja elämisestä tai lomasta Lapissa?

      Unelmoitko Lapista, ja ehkä voisit asua ja elääkin siellä? Lappi kiehtoo niin suomalaisia kuin ulkomaalaisiakin: lumi,
      Sinun unelmalomasi
      6
      765
    Aihe