Autor Zpráva
Paja_
Profil *
Ahoj,

potřeboval bych poradit v následující věci. Chtěl bych vypisovat novinky z třech různých tabulek podle data (id, popis, datum), ale nějak se nemůžu dopracovat ke správnému výsledku. Spíš nevím, jak správně spojit tři babulky. Na googlu jsem sice něco vyhledal, ale chytrý z toho moc nejsem a ani nevím, jestli je to vůbec možné.

Díky za jakýkoli tip.
SwimX
Profil
Paja:
tabulky se obvykle psojijí JOINem, ale musí mít nějakou provázanost. Třeba tabulka kategorie (id, název), a druhá tabulka podkategorie (id, název, id_kategorie).
pak se spojí dohromady takto:
SELECT k.nazev as kat, p.nazev as pod FROM kategorie k JOIN podkategorie p ON k.id = p.id_kategorie


pokud chcete ale prostě vybrat všechna data ze třít abulek a vypsat je, pak vám stačí
SELECT popis, datum FROM tab1, tab2, tab2
Paja_
Profil *
Svůj první dotaz jsem asi špatně položil. Pro zjednodušení jsem tabulky omezil na dvě (ze třech bych to asi už vůbec nepochopil). Chtěl bych na úvodní stránku vypisovat "aktuality", které by byly řazeny podle data z těch dvou tabulek. Tabulky mají různý počet sloupců.

např.: v první bude - id, popis, datum, komentare, tabulka
v druhé - id, nazev, popis, datum, komentare, tabulka

Takže ve finále by v záložce aktuality bylo vypsáno posledních (x) aktualit tvořených z těch dvou tabulek. Potřebuju to nějak vecpat do array - podmínkama už bych si rozdělil co k čemu. Pokud to někdo pochopí, budu rád, mě už to hlava nebere ;)
Paja_
Profil *
jen bych doplnil, že pokud použiji

mysql_query("SELECT * FROM novinky, zapisnik WHERE verejne = 1  ORDER BY datum DESC LIMIT 20 ") or die(mysql_error());


tak mi to vypíše chybu "Column 'verejne' in where clause is ambiguous", když podmínku odstraním, nastane stejný problém s batem
pEeLL
Profil
Paja:
ak mi to vypíše chybu "Column 'verejne' in where clause is ambiguous
tohle je myslim tim ze mas sloupec verejne v obou tabulkach. bud jeden prejmenuj nebo definuj ve ktere tabilce se ma verejne rovnat jedne.
SwimX
Profil
Paja:
tato chyba je způsobená tím, co píše pEeLL

řešení:
mysql_query("SELECT * FROM novinky, zapisnik WHERE novinky.verejne = 1 AND zapisnik.verejne = 1 ORDER BY datum DESC LIMIT 20 ") or die(mysql_error());
Kajman_
Profil *
Hledáte union

(select nadpis_novinky as nadpis, datum from novinky where verejne=1 order by datum desc limit 20)
union
(select nadpis_zapisku as nadpis, datum from zapisky where verejne=1 order by datum desc limit 20)
order by datum desc limit 20
Paja_
Profil *
Kajman:

Co se týče UNIONu, tak ten jsem našel, buhužel jsem neměl stejný počet a názvy sloupců, ale Vaše kouzelné slovíčko "AS" mi dosti pomohlo a vše šlape, jak jsem si představoval. On už to sice zmínil SwimX, ale bylo tam toho na mě moc a nepochopil jsem to.

Děkuji Vám všem za příspěvky!

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: