ugrás a tartalomhoz

Mit rontok el a lekérdezésben?

lillilla · 2014. Már. 23. (V), 20.32
Van 3 táblám:
MENÜ
m_id
m_nev (menüpont neve)
m_tartalom (ha van plugin,akkor üres)
m_p_id (plugin id)
m_s_id (státusz id)

PLUGINOK
p_id
p_nev (plugin neve,pl képgaléria)
p_file (include-olni való fájl, pl kepgaleria.php)

STATUSZ
s_id
s_nev (aktív vagy passzív)

A célom, hogy egy táblázatba kiírassam a következőket:
m_id
m_nev
m_tartalom
p_nev
s_nev

Eddig jutottam:
  SELECT m_id, m_nev, m_tartalom, s_nev, p_nev
		FROM menu, statusz, pluginok
		WHERE m_s_id=s_id AND m_p_id=p_id
A problémám az,hogy nem írja ki azokat a menüpontokat,ahol az m_p_id mezőben NULL található. Hogy javítsam ki?
 
1

A NULL (gyanítom, nem csak

H.Z. · 2014. Már. 23. (V), 20.59
A NULL (gyanítom, nem csak Oracle-ben) egy olyan érték, ami bármivel hasonlítva false értéket ad vissza.
Szóval a feltételedet zárójelbe tenném és mögé írnám, hogy "OR m_p_id IS NULL".

Ha jól értem a problémádat.
2

WHERE m_s_id=s_id AND

Joó Ádám · 2014. Már. 23. (V), 21.00
WHERE m_s_id=s_id AND (m_p_id=p_id OR m_p_id IS NULL)
Így?
3

Bocs, igazad van, rosszul

H.Z. · 2014. Már. 23. (V), 21.40
Bocs, igazad van, rosszul írtam a zárójelezést.
4

Most benne vannak a NULL-osok

lillilla · 2014. Már. 23. (V), 22.31
Most benne vannak a NULL-osok is,de minden null-osból 6db van (6féle plugin van jelenleg). Ez mitől van?
5

Mert az eredményhalmaz a

Joó Ádám · 2014. Már. 23. (V), 22.48
Mert az eredményhalmaz a három tábla sorai keresztszorzatából áll össze, ezeket szűröd a feltételekkel.
6

Olvass utána a join

Joó Ádám · 2014. Már. 23. (V), 23.06
Olvass utána a join fogalmának. A left outer join az a művelet, amit keresel:
SELECT pages.id, pages.title, plugins.name
FROM pages LEFT OUTER JOIN plugins
ON pages.plugin = plugins.id
Javaslom, hogy térj át az angol azonosítók használatára a kódodban, a mezők nevét pedig ne prefixeld, van rá nyelvi konstrukció, ahogy azt fent látod.
7

Köszönöm szépen.

lillilla · 2014. Már. 24. (H), 00.12
Én eddig azért használtam, mert azt mondták, hogy jobb, mivel így nem kavarodok bele a mezőnevekbe. Ha azt mondod,hogy ez nekem rossz, akkor legközelebb nem így használom, csak még nem kerültem olyan szituációba, ahol ez gondot okozhatott volna. Van valami gyakorlati haszna, vagy valami szabály erre, hogy miért jobb (szükségesebb) a táblanevet használni megkülönböztetésül?
8

Majdnem egybetűs nevek

Vilmos · 2014. Már. 24. (H), 00.37
Természetesen van haszna. Minden mezőről lehet tudni hová tartozik ha van táblanév. Most egyetlen betű azonosítja a táblát, ez inkább kellemetlen mint hasznos. Így is tudhatod persze, de explicit tábla névvel olvashatóbb a program. Nem szó szaporítás többet írni, magunkért tesszük, akármit is hallottál erről.

Régi "szabály gyüjtemény", még érvényes, mindjárt az elején említi az egybetűs neveket: Hogyan írjunk karbantarthatatlan kódot
9

Köszönöm

lillilla · 2014. Már. 24. (H), 00.59
Értem. Ebből a szempontból valóban több értelme van.
A leírás is igen hasznos, köszönöm :)