ugrás a tartalomhoz

MySQL - 3 Tábla - szűkítés

peachman · 2013. Már. 11. (H), 16.12
Segítség kellene az alábbi egyszerűsített modell használatával.

| termek    | |  gyarto      | | telepules |
|-----------| |--------------| |-----------|
| id        | | id           | | id        |
| nev       | | nev          | | nev       |
| gyarto_id | | telepules_id |  -----------
 -----------   --------------


Termékeket szeretnék listázni (név-gyártó-település), oly módon, hogy csak azokat mutassa meg, amiknek a gyártója telepules_id azonosítójú településen található.
Ebben kérnék segítséget. Az éles környezetben a termek táblához a többi tábla JOIN LEFT-el kapcsolódik.
 
1

Közben lehet, hogy

peachman · 2013. Már. 11. (H), 16.25
Közben lehet, hogy megtaláltam a megoldást. Szerintem túlkombinálhattam.
Ezt lehetne megoldás illetve lehet esetleg szebben?

SELECT tk.id AS termekId, tk.nev AS termekNev, gy.nev AS gyartoNev, ts.nev AS telepulesNev
FROM termek AS tk
LEFT JOIN gyarto AS gy ON gy.id=tk.gyarto_id
LEFT JOIN telepules AS ts ON gy.telepules_id=ts.id
WHERE tk.id = '$telepules_id'
2

A where feltételed nem jó,

szjanihu · 2013. Már. 11. (H), 19.12
A where feltételed nem jó, ts.id kellene oda. És használj prepared statementet, ne rakd csak úgy oda a $telepules_id-t.
3

A harmadik táblát be sem kell hívnod.

tihi · 2013. Már. 11. (H), 19.58
A harmadik táblát be sem kell hívnod.

Valahogy, így nézne ki ( nem teszteltem )
select termek.id 
from termek
inner join gyarto on ( gyarto.id = termek.gyarto_id)
where gyarto.telepules_id = :telepules_id
4

Látom kell a település neve

tihi · 2013. Már. 11. (H), 20.02
Látom kell a település neve is... akkor tényleg kell a 3. tábla is.
5

Igen, közben láttam, hogy

peachman · 2013. Már. 11. (H), 21.19
Igen, közben láttam, hogy elírtam tk-ra a ts-t.
A prepared statement-et pontosan miért kell használnom?
Mysqli-t használok az igaz, de szoktam real_escape_string()-et használni.
Csak érdekel, hogy mit is tud. Referenciát néztem róla, de nekem olyan sprintf() feeling-je van. Gondolom nem kell akkor mellé már a real_escape_string() sem.
6

Megszokás... Másrészt prepare

tihi · 2013. Már. 11. (H), 22.34
Megszokás... Másrészt prepare statement jobb megoldás (szerintem)... Az "escapelést" a SQL szerver végzi. Biztonság, és sebesség. Ezen felül nem tudnám indokolni a használatát. Utána fogok járni. :)
7

Egyszer felejted el az

bamegakapa · 2013. Már. 12. (K), 15.11
Egyszer felejted el az eszképelést (sietsz, késő van, stb), aztán máris ott az SQL Injection sebezhetőség. A prepared statement használatával ezzel nem lesz probléma.