» »

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.

$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

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

Pimoz ::

Um...Kaj?
Ali sem jaz blesau ali pa tole ne more delati?

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

drola ::

Zakaj si šel komplicirat s subqueryjem?
https://drola.si

Ziga Dolhar ::

Subquery za tole je overkill. Dej mal benchmarkaj :).
https://dolhar.si/

AndrejS ::

Tako učijo SQL na fakultetah. V realnem primeru z mnogo podatki pa je to res problem.

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.

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

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.

technolog ::

Na tako trivialnih zadevah optimizator niti ne zašvica.

SkIDiver ::

Pimoz je izjavil:

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.


Res je.


Vredno ogleda ...

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

SQL vprasanje (strani: 1 2 )

Oddelek: Programiranje
688360 (5039) BivšiUser2
»

[SQL] teževa pri iskanju zapisov

Oddelek: Programiranje
102108 (1698) lopow
»

baze podatkov

Oddelek: Programiranje
91564 (1483) urkrajnc
»

sql težava

Oddelek: Izdelava spletišč
51331 (1081) CaqKa
»

Malce zahtevnejši SQL stavek včasih narobe SELECT-a

Oddelek: Izdelava spletišč
302142 (1811) Brilko

Več podobnih tem