Forum » Izdelava spletišč » PHP pridobivanje podatkov iz dveh tabel po tujem ključu
PHP pridobivanje podatkov iz dveh tabel po tujem ključu

SkIDiver ::
Mogoče malce ponesrečen naslov, ker niti ne vem kako na kratko opisat težavo. Gre za nalogo na fakulteti, preguglal sem ogromno a mi ne potegne kako rešiti zadevo.
Imam dve tabeli. Obe imata primani ključ, ki se samodejno povečuje. Prva tabela so kategorije s stolpcema; ID, IME. Druga tabela je novice s stolpci; ID, naslov, datum, kategorija_id (tuji ključ, ki je referenca na tabelo kategorija).
V PHP-ju izpišem vsebino celotne tabele novice pri čemer pa moram sedaj namesto kategorija_id izpisati ime kategorije, ki je zapisano v tabeli kategorije.
To je težava, ki mi povzroča sive lase zadnje 4 ure
Kako rešim zadevo?
Koda s pomočjo katere dobim podatke o novicah in jih znotraj while zanke izpišem.
Imam dve tabeli. Obe imata primani ključ, ki se samodejno povečuje. Prva tabela so kategorije s stolpcema; ID, IME. Druga tabela je novice s stolpci; ID, naslov, datum, kategorija_id (tuji ključ, ki je referenca na tabelo kategorija).
V PHP-ju izpišem vsebino celotne tabele novice pri čemer pa moram sedaj namesto kategorija_id izpisati ime kategorije, ki je zapisano v tabeli kategorije.
To je težava, ki mi povzroča sive lase zadnje 4 ure

Koda s pomočjo katere dobim podatke o novicah in jih znotraj while zanke izpišem.
$selectClanki = "SELECT * FROM novice"; $clanki = mysqli_query($povezava, $selectClanki); while($vrstica = mysqli_fetch_array($clanki)) { $id = $vrstica['novica_id']; $naslov = $vrstica['naslov']; $povzetek = $vrstica['povzetek']; $kategorijaID = $vrstica['kategorija_id']; }
- spremenil: SkIDiver ()

Trinitron ::
Težave ne boš rešil s PHP ampak z SQL. Torej, namesto
moraš napisat nekaj takega
Potem v rezultatu dobiš še stolpce iz tabele kategorije.
$selectClanki = "SELECT * FROM novice"
moraš napisat nekaj takega
$selectClanki = "SELECT * FROM novice n LEFT JOIN kategorije k ON n.kategorija_id = n.id"
Potem v rezultatu dobiš še stolpce iz tabele kategorije.

SkIDiver ::
Čist zabluzu v napačno smer
Sem rešil. Hvala!

$selectClanki = "SELECT * FROM ((SELECT * FROM novice LIMIT 4) n) LEFT JOIN kategorije k ON n.kategorija_id = k.kategorija_id";
Zgodovina sprememb…
- spremenil: SkIDiver ()

SkIDiver ::
@Primoz, sedaj dela. Nisi blesav

$selectClanki = "SELECT * FROM ((SELECT * FROM novice LIMIT 4) n) LEFT JOIN kategorije k ON n.kategorija_id = k.id";

Pimoz ::
SELECT n.id, n.naslov, n.datum, k.ime FROM novice n LEFT JOIN kategorije k ON n.kategorija_id = k.id
Dejmo fanta naučit pravilno delat. To pač je pravilni način.
Zgodovina sprememb…
- spremenilo: Pimoz ()

SkIDiver ::
V queryju je LIMIT 4. Če ima kdo kako bolj optimalno rešitev kar na dan z njo.
@Ziga Dolhar se bom poigral. MySQL mi je nepoznan.
@Ziga Dolhar se bom poigral. MySQL mi je nepoznan.
Zgodovina sprememb…
- spremenil: SkIDiver ()

Pimoz ::
SELECT n.id, n.naslov, n.datum, k.ime FROM novice n LEFT JOIN kategorije k ON n.kategorija_id = k.id ORDER BY n.id DESC LIMIT 4
Glede na to da izgleda da imaš relacijo 1:1 bo šlo. Če bi imel relacijo 1:n pa ne.
Zgodovina sprememb…
- spremenilo: Pimoz ()

SkIDiver ::
OK, zdej pa men ni jasno zakaj mi isti query brez sortiranja ni delal pravilno

Zgodovina sprememb…
- spremenil: SkIDiver ()

Pimoz ::
Tako ali tako ORDER BY mora biti zato da veš katere zadnje štiri vrstice bo prebral. Še bolj verjetno je, da boš zadevo hotel urejati po novice.datum.

SkIDiver ::
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | SQL vprasanje (strani: 1 2 )Oddelek: Programiranje | 8521 (5200) | BivšiUser2 |
» | [SQL] teževa pri iskanju zapisovOddelek: Programiranje | 2143 (1733) | lopow |
» | baze podatkovOddelek: Programiranje | 1597 (1516) | urkrajnc |
» | sql težavaOddelek: Izdelava spletišč | 1355 (1105) | CaqKa |
» | Malce zahtevnejši SQL stavek včasih narobe SELECT-aOddelek: Izdelava spletišč | 2191 (1860) | Brilko |