Autor Zpráva
Pesulap
Profil
Ahoj,
chtěl bych vytvořit dotaz, který mi vypíše tuto situaci.

Chci vypsat knihy, které jsou v tabulce "knihy", z kategorií číslo 3 a 4 podle ceny.

tabulka knihy:
id_knihy,jmeno, cena,autor.

tabulka spojeni

id,id_kategorie,id_knihy

Dotaz

$dotaz=mysql_query("SELECT * FROM knihy WHERE ***  ORDER BY ceny DESC");
while($kn=mysql_fetch_array($dotaz)){
echo '...';
}


Potřebuji tam doplnit místo těch *** podmínku, že má vybrat jen knihy, které mají v tabulce "spojeni" řádky o obsahu id_knihy, 3 nebo ID_knihy, 4

Snad tomu porozumíte.

Děkuji
paul27
Profil *
Třeba:

select id_knihy,jmeno,cena,autor from knihy,spojeni where knihy.id_knihy=spojeni.id_knihy and (spojeni.id_knihy=3 or spojeni.id_knihy=4) order by cena desc;
Pesulap
Profil
Asi jsem to špatně napsal..

Ukázka tabulek

Knihy
1,RUR,1000,ČAPEK
2,URU,999,NOVÁK
3,FRK,299,VACEK

Kategorie(ID,jmeno)
1,beletrie
2,komedie
3,drama
4,komiks

Spojeni(ID,ID_kategorie,ID_knihy)
1,1,2
1,4,1
1,3,3

Takže podle zadání by se měli vypsat knihy ID 1 a ID 3

Díky
paul27
Profil *
Ta struktura mi přišla nějaká divná. Tak tedy toto:

select id_knihy,jmeno,cena,autor from knihy,spojeni,kategorie where knihy.id_knihy=spojeni.id_knihy and spojeni.id_kategorie=kategorie.id_kategorie and kategorie.id_kategorie in (3,4) order by cena desc;

Každopádně to je dvakrát inner join (píšu to všechno do where, lze to přepsat i pomocí inner join - to je úplně jedno) a podmínka na id té požadované kategorie.
Pesulap
Profil
mohl by jsi mi tu popsat i tu druhou možnost. Rád s přiučím .

Děkuji
paul27
Profil *
Pomocí inner join:

select id_knihy,jmeno,cena,autor from knihy inner join spojeni on knihy.id_knihy=spojeni.id_knihy inner join kategorie on spojeni.id_kategorie=kategorie.id_kategorie where kategorie.id_kategorie in (3,4) order by cena desc;
Pesulap
Profil
Lze použít místo id_knihy,jmeno,cena,autor tohle * ? mám tam mnohem víc sloupečků a vypisovat je je nesmysl
paul27
Profil *
Pokud napíšete jenom select * from ... tak se vypíšou všechny sloupečky ze všech tabulek, které v tom selectu máte uvedeny. Všechny sloupečky pouze z tabulky knihy lze vypsat třeba takto: select knihy.* from ...
Keeehi
Profil
Pesulap:
Lze použít
Ano lze. Uvažte však, jestli je to opravdu tolik práce tam ty sloupečky vypsat. To že si při zapisování dotazu ušetříte dvě minuty práce Vás potom může třeba stát větší náročnost scriptu na server. Z databáze tím můžete přenášet data, která třeba ani nevyužijete.

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: