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
822
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
- 911445
Asiallinen lähestyminen
Mitä on asiallinen lähestyminen?? Tietääkö tai tajuaako kukaan, varsinkaan miehet??? Eilen NELJÄNNEN kerran jouduin isk1541137En tiedä..
Yhtään minkälainen miesmaku sinulla on. itse arvioin sinua moneenkin otteeseen ja joka kerta päädyin samaan lopputulokse1031020Jennika 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 kyll15877- 82850
- 64760
Milloin viimeksi näit ikäväsi kohteen?
Oliko helppo tunnistaa hänet? Millaisia tunteita tuo näkeminen herätti sinussa?40747Vedalainen metafysiikka
Termi ”metafysiikka” kuuluu Aristoteleelle. Metafysiikka tarkoittaa ”fysiikan jälkeen” eli tietoa siitä, mikä on tavalli289733Ai jaa sinä oletkin ahnas
Ja romanttinen luonne, nyt vasta hiffasin että olet naarastiikeri. Parempi myöhään kuin ei milloinkaan.107728En 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 "tunt44692