PHP.EE FOORUM   
Nimi:   Pass:   Mäleta mind! 
   Teemad | php.ee esilehele | registreeri | Märgi kõik teemad loetuks | #php.ee Skype vestlus | RSS
UUS TEEMA  OTSI  Lehekülgi: 1
mysql päringu tegemine üle mitme tabeli
Postitaja: juzzpoig 2005-03-31 16:32:13
teema selline, et mul on 3 tabelit: Isikud, autod, valdaja.

Isikute tabelis siis isikud, igayhel unikaalne id. Autode tabelis siis autod, igayhel unikaalne id. Valdaja tablis isiku_id ja auto_id.

vaja teha päring saamaks kätte kõik autod koos nende valdajatega ning kui valdaja puudub tahaks ikkagi auto kätte saada ja panna talle juurde märge VALDAJATA. Aga kuna valdaja tabelis pole paari auto_id, isiku_id kui auto pole valdajale määratud, siis neid autosid päringus ei väljastata.

Küsimus siis järgmine, kas kellelgi on kunagi olnud sama probleem ja kas ja kuidas sellest mööda saada. Kas misget moodi joinide, case-ga pole võimalik???

kood on midagi sellist:

select s.auto_id, s.mark as "Auto Mark", s.mudel as "Auto Mudel", i.eesnimi, i.perenimi
from autod s
INNER JOIN valdaja v ON s.auto_id=v.auto_id
INNER JOIN isikud i ON i.isik_id=v.isiku_id

Viimati muudetud: 31-03-2005 16:33:32
Muutja: juzzpoig
Põhjus:

RE: mysql päringu tegemine üle mitme tabeli
Postitaja: aju 2005-03-31 16:40:11
sind peaks aitama RIGHT/LEFT JOIN

http://dev.mysql.com/doc/mysql/en/left-join-optimization.htm
... ja ilmselt huvitab sind sealt see rida:
If there is a row in A that matches the WHERE clause, but there is no row in B that matches the ON condition, an extra B row is generated with all columns set to NULL.

siis pead selecti panema veel IF-i ...
IF(valdaja.tabelX=NULL, 'VALDAJATA', valdaja.tabelX) AS valdaja
RE: mysql päringu tegemine üle mitme tabeli
Postitaja: kilukarp 2005-03-31 17:43:33
a = NULL peaks saama alati false
ikka ISNULL(a) abiks
RE: mysql päringu tegemine üle mitme tabeli
Postitaja: aju 2005-03-31 19:28:59
ei viitsinud tabelite struktuuri süveneda, kuid idee poolest peaks ka lihtsamalt hakkama saama ... näide siis kahe tabeli põhjal:

SELECT *.tabel1, *.tabel2 FROM a AS tabel1, b AS tabel2 WHERE IF(vali.tabel1=vali.tabel2, vali.tabel1=vali.tabel2, 1=1)

... pole kindel kuidas MySQL selle peale käitub
RE: mysql päringu tegemine üle mitme tabeli
Postitaja: juzzpoig 2005-04-01 09:06:37
Selle näite põhjal tehtud päring küll mingit viga ei anna, aga tulemust ka mitte



RE: mysql päringu tegemine üle mitme tabeli
Postitaja: juzzpoig 2005-04-01 09:29:19
Suured Tänud ajule, sain siiski asja tööle :)

Suured Tänud ajule, sain siiski asja tööle :)

kood selline:


select a.seadme_id, a.mark, a.mudel, i.eesnimi, i.perenimi,
IF(ISNULL(i.MS_id), 'VALDAJATA', i.MS_id) AS valdaja
FROM AutodeTabel a LEFT JOIN valdaja b ON
a.seadme_id=b.seade_id
LEFT JOIN IsikudTable i ON i.MS_id=b.isik_id



Tänud ka kilukarbile ISNULL-i eest :)

Viimati muudetud: 01-04-2005 09:56:02
Muutja: juzzpoig
Põhjus:


Leheküljed: 1

©2002-2013 Martin Rebane & PHP.ee kaasautorid
  0.0922529697418