Právě je 14 kvě 2021 03:01

Všechny časy jsou v UTC + 1 hodina [ Letní čas ]




Odeslat nové téma Odpovědět na téma  [ Příspěvků: 2 ] 
Autor Zpráva
 Předmět příspěvku: Mysql SELECT relace do dvou sloupců
PříspěvekNapsal: 14 lis 2014 02:29 
C4 zákazník

Registrován:
13 lis 2014 16:22
Příspěvky:
2
Zdravím včechny, snad jsem název tématu napsal dobře.

potřebuji poradit s tímto dotazem:
Kód:
$result=mysqli_query($con,"SELECT objednavka.Id,objednavka.Id_objednavky,pizza_zaklad.nazev as pizza1, pizza_zaklad.nazev as pizza2 FROM objednavka INNER JOIN pizza_zaklad ON objednavka.Id_pizza1=pizza1, objednavka.Id_pizza2=pizza2 WHERE vyrizeno=0");

mám v tabulce pizza_zaklad seznam druhů pizz, každá pizza má své id, název,složení a cenu.
tabulka objednávka má Id_objednavky, Id_pizza1, Id_pizza2, kvůli možnosti vybrat si půlenou pizzu. Chtěl jsem dát dohromady dotaz, který by najednou zjistil název pizzy podle idéčka ve sloupečku Id_pizza1 a zárověň i z Id_pizza2 v tabulce objednavka z tabulky pizza_zaklad.


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Mysql SELECT relace do dvou sloupců
PříspěvekNapsal: 19 lis 2014 18:15 
C4 podpora
C4 podpora

Registrován:
30 čer 2009 09:14
Příspěvky:
7931
Dobrý den,

bohužel z Vašeho popisu tabulek i SQL příkazu nejsem moc moudrý. Přijde mi, že strukturu tabulek máte složitou a celé si to zbytečně komplikujete. Nebylo by lepší mít v tabulce objednavka pouze jeden sloupeček Id_pizza (místo dvou sloupečku Id.pizza1 a Id_pizza2) a další sloupeček Typ_pizza s hodnotou např. 1 pro celou pizzu a 2 pro půlenou. A pomocí jednoho spojení JOIN si pak jednoduše zjistíte název pizzy z tabulky pizza_zaklad. Příkaz by pak vypadal např.:

Kód:
SELECT objednavka.Id, objednavka.Id_objednavky, pizza_zaklad.nazev, objednavka.Typ_pizza FROM objednavka INNER JOIN pizza_zaklad ON objednavka.Id_pizza = pizza_zaklad.Id_pizza WHERE vyrizeno=0
A samozřejmě ještě zvažte, jestli není lepší použít místo INNER JOIN spojení LEFT JOIN. Protože pokud by v tabulce pizza_zaklad hledané Id_pizza neexistovalo (např. při nechtěném smazání nebo chybné hodnotě Id), tak se při použití INNER JOIN výsledek (daný řádek) vůbec nezobrazí. Ale při použití LEFT JOIN se Vám zobrazí a nazev bude mít hodnotu NULL.

Každopádně pokud chcete ponechat stávající strukturu tabulek, tak můžete použít příkaz ve tvaru:
Kód:
SELECT objednavka.Id,objednavka.Id_objednavky,p1.nazev AS pizza1, p2.nazev AS pizza2 FROM objednavka LEFT JOIN pizza_zaklad p1 ON objednavka.Id_pizza1 = p1.Id_pizza LEFT JOIN pizza_zaklad p2 ON objednavka.Id_pizza2 = p2.Id_pizza WHERE objednavka.vyrizeno=0

_________________
Radek Plašil
Webhosting C4
https://www.c4.cz/


Nahoru
 Profil  
 
Zobrazit příspěvky za předchozí:  Seřadit podle  
Odeslat nové téma Odpovědět na téma  [ Příspěvků: 2 ] 

Všechny časy jsou v UTC + 1 hodina [ Letní čas ]


Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 0 návštevníků


Nemůžete zakládat nová témata v tomto fóru
Nemůžete odpovídat v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete přikládat soubory v tomto fóru

Hledat:
Přejít na:  
FTP Uploader
Staňte se naším zákazníkem!
Hledáme kolegy
PHP, MySQL Hosting
Návody pro C4

© 2009-2021 ČESKÝ WEBHOSTING s.r.o. Kontaktní e-mail: forum@c4.cz
Diskuzní fórum využívá technologie: phpBB, phpBB-SEO.com, phpBB.cz