SQL dotaz v Nette Database (vyber cenu díky 3 tabulkám)
- rerege
- Člen | 58
Prosím pomohl by mi někdo s mým prvním selektem.
Mám tabulku product_e_order kde je pole product_id (a číslo objednávky
v e_order_id)
Mám tabulku product kde je pole price a pole product_id
Mám tabulku product_category kde je product_id a kategorie v poli
category_id
Mám číslo objednávky a potřebuji vybrat cenu produktu, které má
kategorii = 50 -
takový produkt by měl být vždy jen jeden
Prosím, jak to napsat co nejefektivněji pomocí Nette/Database? A jak postupujete, abyste se nezamotali do takového selektu …
Váňa
Editoval rerege (5. 6. 2017 11:47)
- Phalanx
- Člen | 310
Nějak takhle?
<?php
$cena = $this->database->table('product_e_order')
->select('product.price')
->where('e_order_id=? AND product_category.category_id=?', $orderId, $categoryId)
->fetch();
?>
edit: Možná to bude chtít subselect, nejsem z tvého návrhu moc moudrý
<?php
$cena = $this->database->table('product_e_order')
->select('product.price')
->where('e_order_id=? AND product.id IN (SELECT product_id FROM product_category WHERE category_id=?)', $orderId, $categoryId)
->fetch();
?>
Editoval Phalanx (5. 6. 2017 12:33)
- matopeto
- Člen | 395
rerege napsal(a):
Jj snaha byla… mám popsanou 1A4 – prostě amatér na slovo vzatý
Nie je nic zle na tom byt amaterom. Ale bez toho aby si to pochopil to nebude nikdy dobre fungovat a copypastovat cudzi kod bude znamenat dalsie chyby ktorym nebudes rozumniet. Tak google: sql tutorial, joins a pod :)
- rerege
- Člen | 58
@Matopeto – máš samozřejmě pravdu a věř mi, že v této
vývojové fázi tak 80% čtu a googlím a zbytek kóduji – čímž mi to jde
děsně pomalu… nejhorší je, když se to pak nechová, jak si člověk
myslel …
ale tím si prostě musím projít
moc díky @Phalanx – o vnořeném selektu jsem již také četl :o)
hezký den všem a ještě jednou díky
Váňa
- matopeto
- Člen | 395
SQL by bolo nejak takto:
Proste join cez vsetky tabulky a na konci where (poradie joinov a wherov je uz potom na optimalizaciu, ale toto je zaklad.)
SELECT `price` FROM `product_e_order` JOIN `product` JOIN `product_category` WHERE `e_order_id` = "order ID" AND `category_id` = 50;
- rerege
- Člen | 58
Tak ještě raz … mořím se nyní s chybou
No reference found for $product_e_order->product_category
Musím nastavit foreign key v tabulkách, nebo referenci mohu zadat při
dotazu ->ref(… ?
Pokud ano, asi to nemohu dělat, když mám v tab. data, že?
Tabulky jsem promazal, klíč nastavil dle v tabulce product_e_order dle pole
product_id a výsledek se brzy dostavil: problém s No reference found
přetrvává..
Editoval rerege (5. 6. 2017 22:07)
- rerege
- Člen | 58
@matopeto opravdu si cením, že jsi ochotný mi pomoci … od rána s tím zápasím a heureká právě slavím úspěch nakonec zabral ten vnořený selekt – byla tam malá chybka
velmi mi pomohl si MySQL Wokbench otevřít testovací okno a nejprve si to dát do pořádku v SQL(tak jak jsi to psal na začátku) a pak už to byla hračka…
Nicméně koukám kolik je toho ještě přede mnou … opravdu smekám, kdo
si dokáže do hlavy naprat ty tuny informací… principy OOP, MVC, HTML, CSS,
PHP, framework(a většina ne jeden), SQL, JavaScript
+ Composer, Git, IDE, SEO… a to jsem určitě na něco zapomněl
ještě jednou díky
Váňa
Editoval rerege (6. 6. 2017 13:26)
- GEpic
- Člen | 566
Nicméně koukám kolik je toho ještě přede mnou … opravdu smekám, kdo si dokáže do hlavy naprat ty tuny informací… principy OOP, MVC, HTML, CSS, PHP, framework(a většina ne jeden), SQL, JavaScript
+ Composer, Git, IDE, SEO… a to jsem určitě na něco zapomněl
To není za večer, ani za rok, ani za pět let. A není to o tom ty informace naprat do hlavy, ale hlavně pochopit problematiku a být schopný si případné informace dohledat. :)
Editoval GEpic (7. 6. 2017 1:20)