Diskuze: Select z normalizované DB

Ostatní jazyky SQL SQL a databáze Select z normalizované DB

Aktivity (1)
Avatar
Jakub Klindera:23. května 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. května 10:10
Avatar
Odpovídá na Jakub Klindera
Michal Štěpánek:23. května 10:18

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

Nahoru Odpovědět 23. května 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. května 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. května 10:26
Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
Nahoru Odpovědět 23. května 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. května 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. května 10:27
 
Nahoru Odpovědět 23. května 10:26
Avatar
Roman
Člen
Avatar
Odpovídá na Jakub Klindera
Roman:23. května 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. května 10:31
Avatar
Odpovídá na Michal Štěpánek
Jakub Klindera:23. května 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. května 12:16
Avatar
Odpovídá na Jakub Klindera
Michal Štěpánek:23. května 13:22

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

Nahoru Odpovědět 23. května 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. května 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. května 13:24
Avatar
Odpovídá na Jakub Klindera
Michal Štěpánek:23. května 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  +1 23. května 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. května 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. května 15:07
 
Nahoru Odpovědět 23. května 15:06
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:23. května 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. května 15:14
 
Nahoru Odpovědět 23. května 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.