IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Select z normalizované DB

Aktivity
Avatar
Jakub Klindera:23.5.2018 10:10

Zdravíčko,
dělám projekt, mám navrženou databázi viz. příloha, je to funkční. Když si najedu do té hlavní tabulky "letadla" tak to mám vypsané číšlama (např typ_letadla = 1) Když na to číslo najedu myší, ukáže se mi "Boeing 737" kliknout se na to dá, hodí mě to do tabulky typ_letadla. To samé platí u aerolinky.

Problém je v tom, že chci v PHP udělat select třeba jen na boeing 737, tak napíšu

SELECT * FROM letadla WHERE typ_letadla = 1

Na webu se mi to zobrazí, ale bohužel jen číslicí.
Takto:

ID_letadla typ_letadla dolet aerolinka rozpeti
1 1 1000 1 25

a chci at to vypadá takto:

ID_letadla typ_letadla dolet aerolinka rozpeti
1 Boeing 737 1000 Czech Airlines 25

typ_letadla = 1 odkazuje do tabulky typ_letadla a na Boeing 737
aerolinka = 1 do tabulky aerolinka a tam na nazev_aerolinky Czech Airlines

Jedná se jen o školní projekt, všechny údaje jsou smyšlené

 
Odpovědět
23.5.2018 10:10
Avatar
Odpovídá na Jakub Klindera
Michal Štěpánek:23.5.2018 10:18

Musíš k tomu použít v dotazu JOIN na tabulku, kde máš názvy těch letadel

Nahoru Odpovědět
23.5.2018 10:18
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Odpovídá na Jakub Klindera
Michal Štěpánek:23.5.2018 10:24

např.:

SELECT Letadla.ID_letadla, Ciselnik.Nazev, Letadla.Dolet, Linky.aerolinka, Letadla.rozpeti FROM Letadla
INNER JOIN Ciselnik ON Ciselnik.IDtypu_letadla = Letadla.typ_letadla
INNER JOIN Linky ON Linky.IDaerolinky = Letadla.aerolinka
WHERE Letadla.typ_letadla = 1

kde v tabulce "Ciselnik" jsou typy letadel (každý se svým ID) a v tabulce "Linky" jsou typy(druhy) aerolinek taky každá s nějakým ID

Editováno 23.5.2018 10:26
Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
23.5.2018 10:24
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Roman
Člen
Avatar
Roman:23.5.2018 10:26
SELECT letadla.ID_letdla, typ_letadla.typ_letadla, aerolinka.nazev_aerolinky
FROM letadla
LEFT JOIN typ_letadla ON typ_letadla.Id_typu=letadla.typ_letadla
LEFT JOIN  aerolinka ON aerolinka.ID_aerolinky = letadla.aerolinka
WHERE letadla.typ_letadla=1

Mas nevhodne zvolene jmena atributu entit. Entita Typ_letadla by mel mit atribut nazev a ne zase typ_letadla. Z modelu by melo byt zrejme jaka entita je v realnem svete reprezentovana.

Editováno 23.5.2018 10:27
 
Nahoru Odpovědět
23.5.2018 10:26
Avatar
Roman
Člen
Avatar
Odpovídá na Jakub Klindera
Roman:23.5.2018 10:31

A jeste bych se vyhnul pouziti "*" to je spatny postup. Pro lepsi optimalizaci dotazu je dobre presne deklarovat jake atributy a z jakych entit chci ziskat.
Doporucuji si neco nastudovat o optimalizace sql dotazu.

 
Nahoru Odpovědět
23.5.2018 10:31
Avatar
Odpovídá na Michal Štěpánek
Jakub Klindera:23.5.2018 12:16

Děkuji, už se zobrazuje přímo ten typ, ale každopádně mi to vyhazuje asi 30 upozornění na stránce že nejsou definovány dolet, aerolinka, rozpeti

Takto to vypadá

ID_letadla typ_letadla dolet aerolinka rozpeti
1 Boeing 737      

a ta tabulka se zobrazuje až pod :D

Notice: Undefined index: dolet in C:\xampp\htdocs\sablona\boeings.php on line 49
Notice: Undefined index: aerolinka in C:\xampp\htdocs\sablona\boeings.php on line 50
Notice: Undefined index: rozpeti_kridel in C:\xampp\htdocs\sablona\boeings.php on line 51
Notice: Undefined index: dolet in C:\xampp\htdocs\sablona\boeings.php on line 49
Notice: Undefined index: aerolinka in C:\xampp\htdocs\sablona\boeings.php on line 50
Notice: Undefined index: rozpeti_kridel in C:\xampp\htdocs\sablona\boeings.php on line 51
Notice: Undefined index: dolet in C:\xampp\htdocs\sablona\boeings.php on line 49
Notice: Undefined index: aerolinka in C:\xampp\htdocs\sablona\boeings.php on line 50
Notice: Undefined index: rozpeti_kridel in C:\xampp\htdocs\sablona\boeings.php on line 51
Notice: Undefined index: dolet in C:\xampp\htdocs\sablona\boeings.php on line 49
Notice: Undefined index: aerolinka in C:\xampp\htdocs\sablona\boeings.php on line 50
Notice: Undefined index: rozpeti_kridel in C:\xampp\htdocs\sablona\boeings.php on line 51
Notice: Undefined index: dolet in C:\xampp\htdocs\sablona\boeings.php on line 49
Notice: Undefined index: aerolinka in C:\xampp\htdocs\sablona\boeings.php on line 50
Notice: Undefined index: rozpeti_kridel in C:\xampp\htdocs\sablona\boeings.php on line 51
Notice: Undefined index: dolet in C:\xampp\htdocs\sablona\boeings.php on line 49
Notice: Undefined index: aerolinka in C:\xampp\htdocs\sablona\boeings.php on line 50
Notice: Undefined index: rozpeti_kridel in C:\xampp\htdocs\sablona\boeings.php on line 51
Notice: Undefined index: dolet in C:\xampp\htdocs\sablona\boeings.php on line 49
Notice: Undefined index: aerolinka in C:\xampp\htdocs\sablona\boeings.php on line 50
Notice: Undefined index: rozpeti_kridel in C:\xampp\htdocs\sablona\boeings.php on line 51
Notice: Undefined index: dolet in C:\xampp\htdocs\sablona\boeings.php on line 49
Notice: Undefined index: aerolinka in C:\xampp\htdocs\sablona\boeings.php on line 50
Notice: Undefined index: rozpeti_kridel in C:\xampp\htdocs\sablona\boeings.php on line 51
Notice: Undefined index: dolet in C:\xampp\htdocs\sablona\boeings.php on line 49
Notice: Undefined index: aerolinka in C:\xampp\htdocs\sablona\boeings.php on line 50
Notice: Undefined index: rozpeti_kridel in C:\xampp\htdocs\sablona\boeings.php on line 51
 
Nahoru Odpovědět
23.5.2018 12:16
Avatar
Odpovídá na Jakub Klindera
Michal Štěpánek:23.5.2018 13:22

Tak to asi nemáš definovaný v tom dotazu. Ukaž, jak jsi spáchal ten dotaz?

Nahoru Odpovědět
23.5.2018 13:22
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Odpovídá na Michal Štěpánek
Jakub Klindera:23.5.2018 13:24
SELECT letadla.ID_Letadla, typ_letadla.typ_letadla, aerolinka.nazev_aerolinky FROM letadla LEFT JOIN typ_letadla ON typ_letadla.Id_typu=letadla.typ_letadla LEFT JOIN aerolinka ON aerolinka.nazev_aerolinky = letadla.aerolinka WHERE letadla.typ_letadla=1

Děkuji moc, JOINY dělám poprvé :D

 
Nahoru Odpovědět
23.5.2018 13:24
Avatar
Odpovídá na Jakub Klindera
Michal Štěpánek:23.5.2018 13:26

Tak tam ještě zamontuj ten dolet a rozpětí křídel. Mezi námi, pojmenování tabulek a sloupců jsi zvolil dost nešťastně...

Nahoru Odpovědět
23.5.2018 13:26
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:23.5.2018 15:06

SELECT letadla.ID_Letadla, typ_letadla.typ_le­tadla, aerolinka.nazev_a­erolinky

Notice: Undefined index: dolet in C:\xampp\htdoc­s\sablona\boe­ings.php on line 49
Notice: Undefined index: aerolinka in C:\xampp\htdoc­s\sablona\boe­ings.php on line 50
Notice: Undefined index: rozpeti_kridel

V tom selectu se zadny ze sloupcu nejmenuje dolet ani aerolinka ani rozpeti_kridel.

Editováno 23.5.2018 15:07
 
Nahoru Odpovědět
23.5.2018 15:06
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:23.5.2018 15:12

Takhle, pokud to neni uplne jasne, jakoze nam jo, tak si tam dej

echo '<pre>';
var_dump($row);

Melo by to vypsat neco takoveho

array(ID_Letadla=>123, typ_letadla=456, nazev_aerolinky=789)

A ty bys potreboval toto

array(ID_Letadla=>123, typ_letadla=456, aerolinka=789,dolet=xyz, rozpeti=>abc)
  • chybi ti tam doplnit 2 sloupce a pro ten jeden pouzit alias, AS aerolinka
Editováno 23.5.2018 15:14
 
Nahoru Odpovědět
23.5.2018 15:12
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 11 zpráv z 11.