Query iz 4 tablice

Dakle problem je slijedeće prirode:

Imam glavnu tablicu borci, i još tri tablice klub, kategorija, drzava.

u glavnoj tablici borci se zapisuje samo id ( klub, kategorija, drzava ). Treba mi query koji će u SELECTU izvući samo nazive kluba, drzave i kategorije iz tabli a na temelju id-a upisanog u glavnu tabelu. Probal sam ovak al nejde! :slight_smile:

SELECT borci.id_borca, borci.ime, borci.prezime, kategorija.kategorija, klub.klub, drzava.drzava FROM borci, kategorija, klub, drzava WHERE borci.id_kategorija=kategorija.id_kategorija && borci.id_klub=klub.id_klub && borci.id_drzava=drzava.id_drzava

vraća jedan zapis jer je && valjda AND i ne kužim… :frowning:

[quote=“sandrohamzic”]Dakle problem je slijedeće prirode:

Imam glavnu tablicu borci, i još tri tablice klub, kategorija, drzava.

u glavnoj tablici borci se zapisuje samo id ( klub, kategorija, drzava ). Treba mi query koji će u SELECTU izvući samo nazive kluba, drzave i kategorije iz tabli a na temelju id-a upisanog u glavnu tabelu. Probal sam ovak al nejde! :slight_smile:

SELECT borci.id_borca, borci.ime, borci.prezime, kategorija.kategorija, klub.klub, drzava.drzava FROM borci, kategorija, klub, drzava WHERE borci.id_kategorija=kategorija.id_kategorija && borci.id_klub=klub.id_klub && borci.id_drzava=drzava.id_drzava

vraća jedan zapis jer je && valjda AND i ne kužim… :-([/quote]

ovako izgleda…

if (!$conn){die (“spajanje krepalo”); }
$pitamte = “SELECT borci.id_borca, borci.ime, borci.prezime, kategorija.kategorija, klub.klub, drzava.drzava FROM borci, kategorija, klub, drzava WHERE borci.id_kategorija=kategorija.id_kategorija && borci.id_klub=klub.id_klub && borci.id_drzava=drzava.id_drzava”;
if (!$q =mysql_query($pitamte))
{
echo “Nekaj je krepalo pri dohvatu podataka!!!”. mysql_error();
die();
}
if (mysql_num_rows($q)==0){
echo “Trenutno nema zapisa u bazi”?>


<?php; } else { ?> <?php // AKCIJA OBRIŠI ZAPIS U TABLI if ($_GET["action"]=="obrisi") { if ($_GET["id"]) { $sql="DELETE FROM borci WHERE id_borca=" . $_GET["id_borca"]; if (mysql_query($sql)) { echo "Borac je ukljonjen na zahtjev korisnika";?> <?php
    } else {

echo “Nastala je greška pri brisanju borca
” . mysql_error();
}
}
}
while ($redak=mysql_fetch_array($q))

{
?>

ID IME PREZIME KATEGORIJA KLUB DRŽAVA ALATI
"><?=$redak["id_borca"]?> <?=$redak["ime"]?> <?=$redak["prezime"]?> <?=$redak["kategorija"]?> <?=$redak["klub"]?> <?=$redak["drzava"]?> "> "> ">

Ispravi && u AND i ispravi nazive polja:

SELECT borci.id_borca, borci.ime, borci.prezime, kategorija.kategorija, klub.klub, drzava.drzava
FROM borci, kategorija, klub, drzava
WHERE borci.kategorija_id_kategorija = kategorija.id_kategorija
AND borci.klub_id_klub = klub.id_klub
AND borci.drzava_id_drzava = drzava.id_drzava

Jesam, al opet izbacuje jedan zapis. Ja bi da za svaki zapis na temelju id-a kluba, kategorije, i drzave izbaci naziv kluba kategorije i drzave. Podaci se unose u obrazac pomocu comboboxa i on u tablicu borci pod klub etc… Unese samo id. E sad kod izlista trebam vidjeti te vrijednosti id-a

Možeš li dati prvih 5 zapisa iz svake tablice?

U slučaju da su strani ključevi u tablici borci NOT NULL:
SELECT
borci.idborci
, borci.ime
, borci.prezime
, kategorija.kategorija
, klub.klub
, drzava.drzava
FROM
(
(
borci
INNER JOIN
klub
ON
borci.klub_id = klub.id_klub
)
INNER JOIN
kategorija
ON
borci.kategorija_id = kategorija.id_kategorija
)
INNER JOIN
drzava
ON
borci.drzava_id = drzava.id_drzava
ORDER BY
borci.idborci
;
U slučaju da nisu, morat ćeš koristiti LEFT JOIN umjesto INNER JOIN, kako ne bi preskočio borce koji nemaju upisan neki od atributa. Alternativno, kada stvar provučeš kroz EXPLAIN mislim da ćeš vidjeti da će optimalizator jednako efikasno odraditi i ovo:

SELECT
    borci.idborci
  , borci.ime
  , borci.prezime
  , (
          SELECT
              kategorija.kategorija
          FROM
              kategorija
          WHERE
              kategorija.id_kategorija = borci.kategorija_id
      ) AS kategorija
  , (
          SELECT
              klub.klub
          FROM
              klub
          WHERE
              klub.id_klub = borci.klub_id
      ) AS klub
  , (
          SELECT
              drzava.drzava
          FROM
              drzava
          WHERE
              drzava.id_drzava = borci.drzava_id
      ) AS drzava
FROM
    borci
ORDER BY
    borci.idborci
  ;

Za ovaj drugi upit svakako id-jevi moraju i ostati jedinstveni jer moraš dobiti singletonove u podupitima.

Hvala ljudi… Radi sve kako treba. :slight_smile:

Općenito još jedno pitanje?! :slight_smile:

Imam jednu tablu borci… U njoj je ime i prezime a id_kategorije, id_klub i id_drzava se kupe iz još tri table…

sad sam napisal neki search prek combobox-a.

$klub=$_POST[‘klub’];
echo $klub; //Provjera dal uzima id_kluba

	$sql=mysql_query("SELECT * FROM borci WHERE id_klub = $klub");
	$broj_zapisa = mysql_num_rows($sql);
	echo "Ukupno pronađeno rezultata " . $broj_zapisa;
	while($redak=mysql_fetch_array($sql)){
	?>
		<tr>
		<td><?=$redak["id_borca"]?></td>
		<td><a href="uredi.php?id_borca=<?=$redak["id_borca"]?>"><?=$redak["ime"]?></a></td>
		<td><?=$redak["prezime"]?></td>
		<td><?=$redak["id_kategorija"]?></td>
		<td><?=$redak["id_klub"]?></td>
		<td><?=$redak["id_drzava"]?></td>
		<td align=center>
		<a href="uredi.php?id_borca=<?=$redak["id_borca"]?>"><img src="images/edit.png"></a>
		<a href="?action=obrisi&id_borca=<?=$redak["id_borca"]?> "><img src="images/delete.png"></a>
		</td>
		</tr>
	<?php
	}

I to sve radi oke… Ali sad mi ovi zapisi

<?=$redak["id_kategorija"]?> <?=$redak["id_klub"]?> <?=$redak["id_drzava"]?>

ostaju u ID obliku… Kako da velim da mu dam ime?

id_kategorija = kategorija
id_klub=klub
id_drzava=drzava

znaći neću da mi prikazuje id nego nazive! :), Kreiram posebne $sql za svaki upit?

Znači TABLA borci

id_borca ime prezime id_kategorija id_klub id_drzava

Tabla kategorija

id_kategorija kategorija

Tabla klub

id_klub klub

Tabla drzava

id_drzava drzava

SELECT * FROM borci WHERE id_klub = $klub"

probao sam ovako:

SELECT borci.id_borca, borci.ime, borci.prezime, kategorija.kategorija, klub.klub, drzava.drzava
FROM borci, kategorija, klub, drzava
WHERE borci.kategorija_id_kategorija = kategorija.id_kategorija
AND borci.klub_id_klub = $klub
AND borci.drzava_id_drzava = drzava.id_drzava

I vraća svaki zapis u n puta?!??

Možda ovako nešto?

SELECT borci.id_borca, borci.ime, borci.prezime, kategorija.kategorija,klub.klub,drzava.drzava
FROM borci
JOIN klub ON borci.klub_id_klub = klub.id_klub
JOIN kategorija ON borci.kategorija_id_kategorija= kategorija.id_kategorija
JOIN drzava ON borci.drzava_id_drzava= drzava.id_drzava
WHERE borci.klub_id_klub = $klub

[quote=“ein”]Možda ovako nešto?

SELECT borci.id_borca, borci.ime, borci.prezime, kategorija.kategorija,klub.klub,drzava.drzava
FROM borci
JOIN klub ON borci.klub_id_klub = klub.id_klub
JOIN kategorija ON borci.kategorija_id_kategorija= kategorija.id_kategorija
JOIN drzava ON borci.drzava_id_drzava= drzava.id_drzava
WHERE borci.klub_id_klub = $klub[/quote]

Zahvaljujem… :slight_smile: Evo već sam si skinul sql skriptu! :slight_smile:

Nema na čemu :slight_smile:
A skripta uvijek dobra za podsjetit se malo…

Zaigraj se malo sa dizanoj baze.
Ovo je OK.
No ako se zaigraš.
Onda je država na vrhu.
Pa dolaze klubovi. Jedan klub može imati više kategorija.
I na kraju borac je vezan za kombinaciju između klbua i kategoirje.

[quote=“gorrc”]Zaigraj se malo sa dizanoj baze.
Ovo je OK.
No ako se zaigraš.
Onda je država na vrhu.
Pa dolaze klubovi. Jedan klub može imati više kategorija.
I na kraju borac je vezan za kombinaciju između klbua i kategoirje.[/quote]

istina… :frowning: za sad bi bio problem - daj sve klubove iz Švedske! :slight_smile: Bum to posložio


Copyright © 2020 WM Forum - AboutContact - Sponsored by: Mydataknox & Webmaster.Ninja