Hei.
Eli tarvitsen kaksi eri tietoa MySQL taulusta.
Eli näin ne saa kahdella eri lauseella:
SELECT jotain from TAULU1 where id=3; SELECT jotain2 from TAULU2 where name="urpo";
Tiedot tarvitsisi pukata tietty kahteen eri muuttujaan, joten saako nuita samalla lauseella haettua ja laitettua omiin muuttujiinsa, vai täytyykö tehdä kaksi eri hakua ja eka haun jälkeen laittaa tulos muuttujaan ja sitten suorittaa toinen haku ja taas se toinen tieto muuttujaan2 ?
SELECT Taulu1.kentta, Taulu2.kentta FROM Taulu1, Taulu2 WHERE Taulu1.kentta jne jne
Kiitos.
El-Ejecutor
eipä mittää.
unohtu mainita että kyseessä on siis SQL liitos. niistä löytyy verkostakii hyviä ohjeita tulevaisuuden varalle. ihan hyödyllistä osata :)
Kannattaa tutustua myös uuteen liitossyntaksiin, avainsana on JOIN.
Joineissa pitää vähän varoa karteesisia tuloja. Jos vaikka ekasta taulusta löytyykin joku tuhat riviä ja toisesta toinen mokoma, niin tulosjoukossa onkin yhtäkkiä miljoona riviä!
Jos nuo jotain-sarakkeet ovat samaa tyyppiä, kannattaa miettiä myös union-syntaksia:
SELECT jotain from TAULU1 where id=3 UNION SELECT jotain2 from TAULU2 where name="urpo";
Alkuperäisen kysymyksen oletuksilla tuloksena on kaksi riviä (siis kaksi fetch:iä) ja tuossa maalailemassani kauhuskenaariossakin enintään parituhatta riviä.
Itse puolestaan en muista kertaakaan törmänneeni tapaukseen, jossa union olisi tarpeellinen. Yleensä sen voi korvata kahdella erillisellä haulla, jolloin eri tauluissa oleva data tulee haettua erillisiin hakujoukkoihin. Näitä on helponpi käsitellä ohjelmallisesti kuin että tulokset olisivat samassa joukossa ja ne joudutaan jotenkin erottelemaan toimenpiteitä varten (yleensähän data on eri tauluissa sen takia, että ne toimivat eri lailla).
Jos jossain joutuu tekemään kahden taulun täydellisen karteesisen tulon, on todella syytä miettiä kantarakenteita ja hakulauseita. On tietenkin mahdollisuus, että hakujoukko kasvaa suureksi, jos jossain taulussa on 1->n viittaus toiseen tauluun. Tälläisissä tapauksissa ei yleensä ole tarvetta hakea ensimmäistä taulua kokonaan vaan riittää hakea kerralla vain käyttöliittymässä näyttettävä osuus (joka on yleensä vain yksi tietue ja siihen liittyvät toisen taulun viittaukset).
Union on kyllä harvinainen, mutta epätavallinen on tämä alkuperäinen kysymyskin, joka nimenomaan lähti liikkeelle kahdesta erillisestä hausta. Kaipa niitä kantarakenteita pitäisi sitten tässäkin tapauksessa miettiä: mitä yhteistä noilla haettavilla tiedoilla on? Karteesinen tulohan tuossa joinissa luuraa! Taulukohtaisten where-ehtojen perusteella ei ehkä täydellinen, mutta ei siellä kyllä ole yhtikäs mitään, mikä sitoisi taulut jollain tapaa toisiinsa ja rajoittaisi karteesisen tulon.
Pidän kyllä tässä epätavallista unionia tyhmää joinia parempana, jos nuo jotain-sarakkeet ovat samaa tyyppiä. Ja jos taas tiedetään niin paljon, että kyllähän nuo where-ehdot estävät useampiriviset tulojoukot, ihan varmana (vaikkeivat mitään taulujen välistä viittausta sisälläkään), niin ollaanko tässä ihan aikuisten oikeesti ratkaisemassa jotakin todellista ongelmaa, muutakin kuin jotain älypähkinää tai koulutehtävää.
Silloin kun unionia voi käyttää, se voi olla suorituskyvyltään erillisiä hakujoukkoja roimasti parempi.
Aihe on jo aika vanha, joten et voi enää vastata siihen.