Forum » Programiranje » MySQL izpis vsebine iz dveh tabel
MySQL izpis vsebine iz dveh tabel
iMark ::
Pozdravljeni,
Izpisati želim seznam vseh dni v nekem izbranem mesecu, poleg tega pa želim, da se iz druge tabele izpišejo vnosi, ki ustrezajo dnevu iz prve tabele.
Primer:
1. tabela ima vrednosti od 0 do 31 - izpišemo vse (oz. toliko kolikor je dni v izbranem mesecu)
2. tabela ima stolpec datum + ostale stolpce. Ko je dan iz stolpca datum enak vrednosti (dnevu) iz 1. tabele se izpiše ta vrstica z vsemi stolpci - drugače so pač vrednosti v stolpcih null
Torej, če sta v 2. tabeli npr. 2 taka zapisa:
[datum] | [nekaj]
2014-09-02 | foo
2014-09-04 | bar
bi želel, da je izpis tak:
[dan] (ali datum) | [nekaj]
1 | null
2 | foo
3 | null
4 | bar
5 | null
in tako naprej do 31. Še boljše bi bilo če bi imel stolpec [dan] obliko datuma ampak to ni nujno.
Kakšne so možnosti za takšno poizvedbo? Še lepše bi bilo samo z uporabo 2. tabele ampak se to najbrž ne da v MySQL(?).
Nekaj takega sem sam skušal:
Tu je problem, da moram v 2. tabeli hraniti posebej v svojem stolpcu številko dneva in ne vem kako omejiti samo na določen mesec saj če na koncu dodam
Mi vrne samo vnose, ki so v tabeli 2 - torej ne dobim izpisa vseh dni v mesecu.
Če bi lahko v JOIN dal nekaj takega tab2.DAYOFMONTH(datum)=tab1.dan bi bil problem že bližje rešitvi...
Izpisati želim seznam vseh dni v nekem izbranem mesecu, poleg tega pa želim, da se iz druge tabele izpišejo vnosi, ki ustrezajo dnevu iz prve tabele.
Primer:
1. tabela ima vrednosti od 0 do 31 - izpišemo vse (oz. toliko kolikor je dni v izbranem mesecu)
2. tabela ima stolpec datum + ostale stolpce. Ko je dan iz stolpca datum enak vrednosti (dnevu) iz 1. tabele se izpiše ta vrstica z vsemi stolpci - drugače so pač vrednosti v stolpcih null
Torej, če sta v 2. tabeli npr. 2 taka zapisa:
[datum] | [nekaj]
2014-09-02 | foo
2014-09-04 | bar
bi želel, da je izpis tak:
[dan] (ali datum) | [nekaj]
1 | null
2 | foo
3 | null
4 | bar
5 | null
in tako naprej do 31. Še boljše bi bilo če bi imel stolpec [dan] obliko datuma ampak to ni nujno.
Kakšne so možnosti za takšno poizvedbo? Še lepše bi bilo samo z uporabo 2. tabele ampak se to najbrž ne da v MySQL(?).
Nekaj takega sem sam skušal:
SELECT tab2.datum, tab2.nekaj FROM tab1 LEFT JOIN tab2 ON (tab2.dan = tab1.dan)
Tu je problem, da moram v 2. tabeli hraniti posebej v svojem stolpcu številko dneva in ne vem kako omejiti samo na določen mesec saj če na koncu dodam
WHERE datum BETWEEN ("2014-09-01") AND ("2014-09-31"))
Mi vrne samo vnose, ki so v tabeli 2 - torej ne dobim izpisa vseh dni v mesecu.
Če bi lahko v JOIN dal nekaj takega tab2.DAYOFMONTH(datum)=tab1.dan bi bil problem že bližje rešitvi...
- spremenil: iMark ()
iMark ::
Ja ampak kot sem napisal, tista rešitev deluje samo, če imam v 2. tabeli stolpec, ki je popolnoma enak stolpcu iz 1. tabele.
Že že dayofmonth() ampak kako naj ga uporabim v join-u ali kje drugje, da bo delalo.
Drugo pa je, kako naj povem, da poizvedba iz 2. tabele izpiše samo vnose, ki so v določenem mesecu saj če samo dodam to na konec
mi vrne samo vnose, ki so v 2. tabeli in ne vseh "dni" iz 1. tabele.
Že že dayofmonth() ampak kako naj ga uporabim v join-u ali kje drugje, da bo delalo.
Drugo pa je, kako naj povem, da poizvedba iz 2. tabele izpiše samo vnose, ki so v določenem mesecu saj če samo dodam to na konec
WHERE datum BETWEEN ("2014-09-01") AND ("2014-09-31"))
mi vrne samo vnose, ki so v 2. tabeli in ne vseh "dni" iz 1. tabele.
Mesar ::
vrednost = tabela.polje
torej ne, tab2.DAYOFMONTH(datum)=tab1.dan pač pa
torej ne, tab2.DAYOFMONTH(datum)=tab1.dan pač pa
DAYOFMONTH(tab2.datum)=tab1.dan
Your turn to burn!
prtenjam ::
Pozdravljen,
Mogoče se ne razumemo, vendar rešitev je v klasičnem LEFT JOIN, saj le ta pobere vse zapise prve tabele in jim pridruži zapise iz druge tabele oz. zapiše NULL če zapisov v drugi tabeli ni. V SQLite bi to bilo recimo takole (nisem šel preverjat kako MySQL iz datuma izloči dan):
Mogoče se ne razumemo, vendar rešitev je v klasičnem LEFT JOIN, saj le ta pobere vse zapise prve tabele in jim pridruži zapise iz druge tabele oz. zapiše NULL če zapisov v drugi tabeli ni. V SQLite bi to bilo recimo takole (nisem šel preverjat kako MySQL iz datuma izloči dan):
select * from tabela1 t1 left join tabela2 t2 on (t1.id = strftime('%d', t2.datum))
Matjaž Prtenjak
https://mnet.si
https://mnet.si
Mesar ::
V MySql imaš drugače DATE_FORMAT(date,format)
http://dev.mysql.com/doc/refman/5.1/en/...
nafilaš noter datum, pa format, ki ga želiš...
http://dev.mysql.com/doc/refman/5.1/en/...
nafilaš noter datum, pa format, ki ga želiš...
Your turn to burn!
iMark ::
Oh... seveda :D
Najlepša hvala za popravek :)
Mogoče veste še kako omejiti zajem iz 2. tabele? Kam naj bi dal nekaj takega: WHERE datum BETWEEN ("2014-09-01") AND ("2014-09-31")
Najlepša hvala za popravek :)
Mogoče veste še kako omejiti zajem iz 2. tabele? Kam naj bi dal nekaj takega: WHERE datum BETWEEN ("2014-09-01") AND ("2014-09-31")
Spura ::
LEFT JOIN tab2 ON (tab2.dan = tab1.dan and tab2.datum BETWEEN ("2014-09-01") AND ("2014-09-31"))
vorantz ::
pa da bo bolj splošno skombiniraj YEAR(), MONTH() pa NOW() da dobiš podatke za trenutni mesec (najbrž te to zanima?)
iMark ::
Super, odlično! Najlepša vam hvala vsem za pomoč!
Niti nisem pomislil, da bi lahko dal pogoj v JOIN stavek.
vorantz, še boljše tako, ja :)
Niti nisem pomislil, da bi lahko dal pogoj v JOIN stavek.
vorantz, še boljše tako, ja :)
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | Potrebujem MySQL ukazOddelek: Programiranje | 2901 (2509) | zvmk |
» | [SQL] Unikatni izpisiOddelek: Programiranje | 2235 (1622) | 111111111111 |
» | MS Access (strani: 1 2 )Oddelek: Programiranje | 7431 (5489) | travica |
» | MYSQL vprašanjeOddelek: Programiranje | 1807 (1422) | MrBrdo |
» | T-SQL preprost querry pa ne znamOddelek: Programiranje | 1832 (1489) | borchi |