Autor Zpráva
Matess
Profil *
Zdravím.
Potřeboval bych vypsat data ze dvou tabulek, ale to tak, že se vypíše kategorie z první tabulky a veškeré fota v té kategorii z druhé tabulky.

Mám tyto tabulky:
katagorie
... auta
... byty
... osoby
... mesta
... zvirata

foto
... nazev_fotky
... kategorie

Jak to mám nejlépe udělat aby mi to vypsalo vždy všechny fotky v tab. auta, poté všechny fotky v tab. byty, atd. a to nejlépe na jeden while.

Prozatím to dělám takto, ale příjde mi to strašně prasácké.
$dotaz = mysql_query("SELECT * 
                                      FROM foto
                                      WHERE kategorie='auta'");
while ($vypis = mysql_fetch_array($dotaz)) {
  echo $vypis["nazev_fotky"];
}


//... poté další kategorie


$dotaz = mysql_query("SELECT * 
                                      FROM foto
                                      WHERE kategorie='byty'");
while ($vypis = mysql_fetch_array($dotaz)) {
  echo $vypis["nazev_fotky"];
}



Pokud mám 20 kategorií, tak musím pokládat 20 dotazů na DB a to mi vadí.

Jak to lze jinak udělat?

Děkuji za odpověďi.
Anonymní
Profil *
tak pokládej jen jeden dotaz, který bude mít WHERE kategorie=$kategorie a funkci pak budeš volat např.
vypis_kategorie('auta') 
//pro vypsání aut,
vypis_kategorie('byty')
//pro vypsání bytů, atd.
joe
Profil
SELECT * FROM foto ORDER BY kategorie

Pak už si v cyklu při vypisování pohlídáš kategorii.
Proč používáš mysql_fetch_array?
Anonymní
Profil *
pro upřesnění
function vypis_kategorie($kategorie) {
  ...
  $dotaz="SELECT * FROM foto WHERE kategorie='$kategorie'";
 ...
}


//teď zavoláme fci. chceme vypsat auta
 vypis_kategorie('auta');
joe
Profil
Anonymní
Tím si ai nepomůže, protože pokud bude chtít vybrat fotky z 20ti kategorií, musí tuto funkci volat 20x. To znamená 20 dotaz na db. Navíc myslím, že pro tohle je funkce celkem zbytečná :)
vojtah
Profil *
použít spojení, na což se v SQL používá funkce JOIN. tvůj případ by se dal řešit možná takto:

SELECT foto.*
FROM foto JOIN kategorie ON (kategorie.nazev=foto.kategorie)
ORDER BY kategorie.nazev;


Sloupce si samozřejmě uprav podle své db.
Matess
Profil *
Anonymní
No to by šlo, ale mě jde o to aby nebylo potřeba položit 20dotazu, ale aby stačil pouze jeden nebo dva.

vojtah
Díky, zkusím to.

joe
Proč používáš mysql_fetch_array?
A proč ne? Co doporučuješ používat? A proč?
joe
Profil
mysql_fetch_assoc, není důvod používat mysql_fetch_array. Asocitativní pole ti určitě stačit bude.
Matess
Profil *
mysql_fetch_assoc, není důvod používat mysql_fetch_array. Asocitativní pole ti určitě stačit bude.
Já se vtom moc nevyznám.
Používám na všechno mysql_fetch_array, protože se mi snim nejlépe pracuje.

O jeho ne/vyhodách jsem nikde nečetl a tak ho používám pořád.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

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

0