» »

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:
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 ()

vorantz ::

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
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

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):
select * 
  from tabela1 t1
   left join tabela2 t2 on (t1.id = strftime('%d', t2.datum))
Matjaž Prtenjak
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š...
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")

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 :)


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Potrebujem MySQL ukaz

Oddelek: Programiranje
122597 (2205) zvmk
»

[SQL] Unikatni izpisi

Oddelek: Programiranje
212065 (1452) 111111111111
»

MS Access (strani: 1 2 )

Oddelek: Programiranje
647073 (5131) travica
»

MYSQL vprašanje

Oddelek: Programiranje
131666 (1281) MrBrdo
»

T-SQL preprost querry pa ne znam

Oddelek: Programiranje
171724 (1381) borchi

Več podobnih tem