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?
MySQL kenttien yhdistäminen
7
838
Vastaukset
- 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
Kotkalainen Demari Riku Pirinen vangittu Saksassa lapsipornosta
https://www.kymensanomat.fi/paikalliset/8081054 Kotkalainen Demari Riku Pirinen vangittu Saksassa lapsipornon hallussapi852287Olen tosi outo....
Päättelen palstajuttujen perusteella mitä mieltä minun kaipauksen kohde minusta on. Joskus kuvittelen tänne selkeitä tap182257Vanhalle ukon rähjälle
Satutit mua niin paljon kun erottiin. Oletko todella niin itsekäs että kuvittelet että huolisin sut kaiken tapahtuneen181700- 1041458
Maisa on SALAKUVATTU huumepoliisinsa kanssa!
https://www.seiska.fi/vain-seiskassa/ensimmainen-yhteiskuva-maisa-torpan-ja-poliisikullan-lahiorakkaus-roihuaa/1525663921416Hommaatko kinkkua jouluksi?
Itse tein pakastimeen n. 3Kg:n murekkeen sienillä ja juustokuorrutuksella. Voihan se olla, että jonkun pienen, valmiin k1631248Aatteleppa ite!
Jos ei oltaisikaan nyt NATOssa, olisimme puolueettomana sivustakatsojia ja elelisimme tyytyväisenä rauhassa maassamme.2571042- 63943
- 78909
Omalääkäri hallituksen utopia?
Suurissa kaupungeissa ja etelässä moinen onnistunee. Suuressa osassa Suomea on taas paljon keikkalääkäreitä. Mitenkäs ha174893