Autor | Zpráva | ||
---|---|---|---|
quatzael Profil |
Řekněme, že budu mít tři tabulky:
![]() Když budu chtít vybrat Ferdu, a všechny jeho produkty, který si v jedné objednávce objednal, jak to udělám? Nejlépe, aby šel ten celý výsledek dostat do pole, nějak takto: $result = mysqli_fetch_assoc($query); $result['client'] ... Ferda $result['product'][0] ... lopatka $result['product'][1] ... kyblíček $result['product'][2] ... šroubovák Jde mi hlavně o to v jednom dotazu získat všechny výsledky do pole. Nemám vůbec tušení jak tyhle JOIN dotazy fungují.. Pokud by to vyhazovalo automaticky něco takového: $result['clients']['client'] , tedy multi pole podle názvů tabulek a potom teprve sloupců, lze nějak docílit, aby se dala ta struktura asociativního pole předem upravit, aby například šlo místo názvu tabulky zvolit jiný, např. abych získal $result['visitors']['client'] ?
Předem díky za odpovědi. A ještě jaký použít klíč na sloupce client_id a product_id? Jestli je vůbec použití klíčů v tomto případě nutné.. |
||
Alphard Profil |
Chtít to na jednom řádku by nebylo moc rozumné, ale ty to tak ani nechceš, viz ta žádaná struktura pole. Ta je rozumná, ale určitě to není jeden řádek. (SQL moc neumí vracet dynamický počet
Tohle je buď typický příklad na join, který se seskupí u klienta ( Diskuse JPW: Nejčastější potíže s PHP (FAQ) » Nadpis skupiny nejen při výpisu z databáze), nebo to vybrat pomocí více dotazů (na základě id a spárovat v PHP). Srování různých přístupů na Srovnání dotazů do závislých tabulek. Pomocí NotORM by to bylo úplně bez práce. |
||
quatzael Profil |
#3 · Zasláno: 15. 11. 2015, 02:48:45
Alphard:
Díky za odpověď. A jak by to teda bylo pomocí toho NotORMu? Vůbec jsem o tom doteď neslyšel.. Jen vím, že existuje dibi, ale nedokážu moc porovnat výhody jednotlivých frameworků, takže si nejsem jistej do čeho se pustit.. |
||
Alphard Profil |
#4 · Zasláno: 15. 11. 2015, 10:31:52
quatzael:
„A jak by to teda bylo pomocí toho NotORMu? Vůbec jsem o tom doteď neslyšel..“ Já jsem NotORM doplnil spíš pro zajímavost. To je knihovna, která dělá přesně to párování dat v PHP, o kterém jsem psal v [#2] Alphard. Kdybys ho používal, automaticky by si vytahal všechna potřebná data, aniž by bylo potřeba psát join nebo cokoliv ručně párovat, nějak takhle: foreach ($db->books() as $book) { // automatický "hlavní" select z tabulky books echo $book["title"]; echo $book->author["name"] ; // data z tabulky author foreach ($book->book_category() as $book_category) { // automatický select z referencované tabulky přes "spojovací tabulku" v relaci M:N, tj. automatický join echo $book_category->category["category"]; } } Dibi je víc nízkoúrovňové, tam by se spíš hodilo napsat si ručně ten join a pro rozdělení dat použít metodu fetchAssoc() . Nette\Db potom v podstatě spojuje dřívější dibi a NotORM dohromady.
Aspoň dibi doporučuji, protože pracovat s čistým mysqli se mi zdá praštěné. Ale to jsem tady uváděl asi tisíckrát... |
||
quatzael Profil |
#5 · Zasláno: 15. 11. 2015, 13:06:13
Alphard:
No jestli jsem to správně pochopil, tak pro použití notORM je potřeba mít v tabulkách sloupečky obsahující klíč a odkazující na jinou tabulku ve formátu nazevtabulky_id. Jenže si nejsem jistý, jestli to řeší můj problém. Já potřebuju, aby mi to vyhledávalo v tomto systému. Klient - Ferda, ve sloupečku orders je 6, tudíž se vyhledá řádek v tabulce orders sloupeček clients_id s číslem 6, zjistí se hodnota ve sloupečku products (zde 1) a potom vyhledá všechny řádky v tabulce products, které mají ve sloupečku product_id hodnotu 1.. Teď jsem si trochu uvědomil, že jsem nenazval ty sloupečky moc šťastně, třeba to client_id nesouvisí s id v tabulce clients, ale se sloupečkem orders |
||
Časová prodleva: 9 let
|
0