Autor | Zpráva | ||
---|---|---|---|
quatzael Profil |
#1 · Zasláno: 27. 1. 2017, 20:54:11
Dotaz 1:
Jak docílit toho, abych měl data z více tabulek rozdělené do asociativního pole, aby se nemíchaly sloupce se stejným názvem? SELECT * FROM contracts JOIN products ON products.contract_id = contracts.id JOIN items ON items.contract_id = contracts.id WHERE contracts.user_id = 32 Potřeboval bych, abych dostal výsledek do asociativního pole, pro případ, že by ve všech třech tabulkách (contracts, products, items) byl sloupec s názvem "name": $result['contracts']['name'] ..... vrací hodnotu sloupce "name" z tabulky contracts $result['products']['name'] ..... vrací hodnotu sloupce "name" z tabulky products $result['items']['name'] ..... vrací hodnotu sloupce "name" z tabulky items Dotaz 2: Jak docílit toho, abych dostal více záznamů, které vyhovují podmínce JOIN, z tabulky items, která bude mít více řádků s odpovídající hodnotou contract_id, do pole takto: SELECT * FROM contracts JOIN items ON items.contract_id = contracts.id WHERE contracts.user_id = 32 $result['items'][0]['name'] ..... vrací hodnotu sloupce "name" z tabulky items z prvního řádku $result['items'][1]['name'] ..... vrací hodnotu sloupce "name" z tabulky items z druhého řádku |
||
Keeehi Profil |
#2 · Zasláno: 27. 1. 2017, 21:52:58
quatzael:
Vícerozměrné pole z toho nijak automaticky nedostaneš. Aby se ti sloupce nejmenovaly stejně, tak si je můžeš pojmenovat. SELECT contracts.id `contracts.id`, contracts.name `contracts.name`, products.contract_id `products.contract_id`, products.name `products.name`, items.contract_id `items.contract_id`, items.name `items.name` FROM contracts JOIN products ON products.contract_id = contracts.id JOIN items ON items.contract_id = contracts.id WHERE contracts.user_id = 32 Výsledkem bude zase jednorozměné pole, ale tentokrát i se jmény tabulek. $result['contracts.name'] Ještě úvaha nad pozicí indexu v $result['items'][0]['name']
$result[0]['items']['name'] - na začátku by dával smysl při joinu tabulek.
$result['items'][0]['name'] - uprostřed by dával smysl pokud by se vybíraly data jen z tabulky items, pak by to ale mělo vypadat $result[0]['name']
$result['items']['name'][0] - na konci to nemá smysl už vůbec, pole nepředstavují řádky ale sloupce, data mají ale souvislost v řádku a ne ve sloupci.
Jediné správné řešení mi tedy přijde $result[0]['items.name'] . Proč? No protože když si zkusíš data vypsat do tabulky, tak v tomto pořadí to krásně půjde s foreach. Při obráceném pořadí $result['items.name'][0] to nijak nepůjde, jelikož by se data procházela po sloupcích ale ty je potřebuješ po řádcích.
|
||
quatzael Profil |
#3 · Zasláno: 28. 1. 2017, 04:27:02
Keeehi:
Díky za odpověď. Nejde nějak ty sloupce pojmenovat skupinově? Já jich tam mám v každý tabulce několik desítek, to bych se upsal.. Navíc nějaký úpravy s tabulkou pak budou strašně težkopádný.. K tomu dotazu č. 2: Možná jsem nedal nejlepší příklad. Tady je vhodnější: V jedné tabulce budu mít autory a v další knížky, které napsali. Tzn., že k jednomu autorovi patří třeba 7 knih, k dalšímu 4 a k nějakému třeba žádná. Jak tedy udělat, abych získal pole, abych mohl pomocí cyklu while vypsat všechny autory a uvnitř toho cyklu použít další cyklus while na ty knížky?
Teď jsem to napsal myslím celkem srozumitelně.. |
||
Keeehi Profil |
#4 · Zasláno: 28. 1. 2017, 10:04:58
|
||
TomášK Profil |
mysqli_fetch_fields vrátí informace o polích v dotazu, mimo jiné název a z jaké tabulky pocházejí. Přidej k tomu trochu práce s poli a dostaneš výsledek, který chceš v 1). Nechceš použít hotové řešení (klíčové slovo ORM) než tvořit vlastní?
|
||
quatzael Profil |
#6 · Zasláno: 28. 1. 2017, 10:55:24
TomášK:
Koukal jsem na ORM, ale připadá mi to spíš jako přístup k programování než skutečné "hotové řešení". |
||
Keeehi Profil |
#7 · Zasláno: 28. 1. 2017, 12:08:31
quatzael:
ORM samozřejmě koncept je. A pak existují projekty, který tento koncept implementují. Jako je třeba Doctrine 2. Pokud využíváš nějaký framework, nejspíše nějaké ORM mít implementované bude, nebo pro něj bude existovat nějaké rozšíření. |
||
quatzael Profil |
#8 · Zasláno: 28. 1. 2017, 12:20:09
Keeehi:
No, teď to teda budu muset vyřešit podle tohoto: [#4] Keeehi, protože kvůli několika dotazům do databáze nebudu všechno předělávat. Do budoucna se chci naučit Symfony 2, ale zdá se mi to strašně složitý udělat ten první krok. Vůbec všechny PHP frameworky mi připadají strašně nesrozumitelný. Nedá se nikde dočíst co fakticky "umí" a implementace je nesmírně náročná.. :o( |
||
Alphard Profil |
#9 · Zasláno: 28. 1. 2017, 12:43:16
„Jako je třeba Doctrine 2.“
Ehm, to je hned přístup s dělem na komára. Dokud se tady bavíme čistě o selectech, mohlo by stačit třeba Nette\Database. Požadavek z [#3] by zvládlo v pohodě. |
||
Časová prodleva: 8 let
|
0