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 | 8714 (5393) | BivšiUser2 |
» | [SQL] teževa pri iskanju zapisovOddelek: Programiranje | 2181 (1771) | lopow |
» | baze podatkovOddelek: Programiranje | 1622 (1541) | urkrajnc |
» | sql težavaOddelek: Izdelava spletišč | 1387 (1137) | CaqKa |
» | Malce zahtevnejši SQL stavek včasih narobe SELECT-aOddelek: Izdelava spletišč | 2225 (1894) | Brilko |