SELECT WHERE logikai felépítése
Sziasztok!
Tudna valaki segíteni nekem, hogy értelmezzem a SELECT WHERE logikai felépítését? Mit is értk ez alatt (php + MySQL és ide nem kódot írtam):
Pl.: Piac az adattábla és almát keresek. Szeretném megtudni az összes kofa nevét, ahol a különböző nevű almák között akad piros alma és 100Ft/kg vagy mindegy milyen színű és olcsóbb legyen 100Ft-nál.
SELECT kofa_neve FROM piac WHERE termek = alma AND szine = piros AND ara = 100 OR termek = alma AND szine = '' AND ara < 100
Hova kerülnek a zárójelek? A zárójelek klépeznek logikai egységeket? Hogyan viszonyulnak ezek a logiaki egységek egymáshoz?
Így?????????????????
SELECT kofa_neve FROM piac WHERE (termek = alma AND szine = piros AND ara = 100) OR (termek = alma AND szine = '' AND ara < 100)
Így?????????????????
Ha azt is szeretném megtudni, hogy a kofa éppen nyitva van-e + az előző lekérdezés:
SELECT kofa_neve FROM piac WHERE nyitva = true AND termek = alma AND szine = piros AND ara = 100 OR termek = alma AND szine = '' AND ara < 100
És itt?????????????
SELECT kofa_neve FROM piac WHERE nyitva = true AND ((termek = alma AND szine = piros AND ara = 100) OR (termek = alma AND szine = '' AND ara < 100))
És itt?????????????
Ha a találtaokat listába gyűjtöm és a kofák nevéből csak az "a" betűvel kezdődőeket szeretném kigyűjteni:
SELECT kofa_neve FROM piac WHERE kofa_neve LIKE a% AND nyitva = true AND termek = alma AND szine = piros AND ara = 100 OR termek = alma AND szine = '' AND ara < 100
Itt már készvagyok!!!!!!!!!!!!!!
És ha az "a" betűvel kezdődő kofák listájában azokat az almákat szeretném megjeleníteni, amelyek megfelelnek az előző kitériumoknak (nyitva meg szín meg ár) de az almák neve "g" betűvel kezdődjön:
SELECT kofa_neve FROM piac WHERE kofa_neve LIKE a% AND nyitva = true AND termek = alma AND termekneve LIKE g% AND szine = piros AND ara = 100 OR termek = alma AND szine = '' AND ara < 100
Nézzetek rá, köszönöm: s_volenszki
■ Tudna valaki segíteni nekem, hogy értelmezzem a SELECT WHERE logikai felépítését? Mit is értk ez alatt (php + MySQL és ide nem kódot írtam):
Pl.: Piac az adattábla és almát keresek. Szeretném megtudni az összes kofa nevét, ahol a különböző nevű almák között akad piros alma és 100Ft/kg vagy mindegy milyen színű és olcsóbb legyen 100Ft-nál.
SELECT kofa_neve FROM piac WHERE termek = alma AND szine = piros AND ara = 100 OR termek = alma AND szine = '' AND ara < 100
Hova kerülnek a zárójelek? A zárójelek klépeznek logikai egységeket? Hogyan viszonyulnak ezek a logiaki egységek egymáshoz?
Így?????????????????
SELECT kofa_neve FROM piac WHERE (termek = alma AND szine = piros AND ara = 100) OR (termek = alma AND szine = '' AND ara < 100)
Így?????????????????
Ha azt is szeretném megtudni, hogy a kofa éppen nyitva van-e + az előző lekérdezés:
SELECT kofa_neve FROM piac WHERE nyitva = true AND termek = alma AND szine = piros AND ara = 100 OR termek = alma AND szine = '' AND ara < 100
És itt?????????????
SELECT kofa_neve FROM piac WHERE nyitva = true AND ((termek = alma AND szine = piros AND ara = 100) OR (termek = alma AND szine = '' AND ara < 100))
És itt?????????????
Ha a találtaokat listába gyűjtöm és a kofák nevéből csak az "a" betűvel kezdődőeket szeretném kigyűjteni:
SELECT kofa_neve FROM piac WHERE kofa_neve LIKE a% AND nyitva = true AND termek = alma AND szine = piros AND ara = 100 OR termek = alma AND szine = '' AND ara < 100
Itt már készvagyok!!!!!!!!!!!!!!
És ha az "a" betűvel kezdődő kofák listájában azokat az almákat szeretném megjeleníteni, amelyek megfelelnek az előző kitériumoknak (nyitva meg szín meg ár) de az almák neve "g" betűvel kezdődjön:
SELECT kofa_neve FROM piac WHERE kofa_neve LIKE a% AND nyitva = true AND termek = alma AND termekneve LIKE g% AND szine = piros AND ara = 100 OR termek = alma AND szine = '' AND ara < 100
Nézzetek rá, köszönöm: s_volenszki
SELECT WHERE logikai felépítése
pl. 1.:
SELECT kofa_neve FROM piac WHERE (termek = alma) AND (((szine = piros) AND (ara= 100)) OR (AND ara < 100))
pl. 2.:
SELECT kofa_neve FROM piac WHERE ((nyitva=true) AND (termek = alma)) AND (((szine = piros) AND (ara= 100)) OR (AND ara < 100))
pl. 3.:
SELECT kofa_neve FROM piac WHERE ((nyitva=true) AND (termek = alma) AND (kofa_neve LIKE "a%")) AND (((szine = piros) AND (ara= 100)) OR (AND ara < 100))
pl. 4.:
SELECT kofa_neve FROM piac WHERE ((nyitva=true) AND (termek = alma) AND (kofa_neve LIKE "a%") AND (termekneve LIKE "g%")) AND (((szine = piros) AND (ara= 100)) OR (AND ara < 100))
...
Logikai reláció
Hogyan viszonyulnak a zárójeles egységek egymáshoz? Mi az értelmezés sorrendje?
s_volenszki
SELECT WHERE logikai felépítése
Próbálj meg logikusan gondolkodni, nem tudom tanultál-e egyetemen/főiskolán matematikai logikát? Azt lehet nagyon jól alkalmazni, a feladatod megfogalmazása kérdés formájában, azt kell ítéletkalkulus szerint visszafordítani (ha jól emléxem)...
Tahát pl.:
"Szeretném megtudni az összes kofa nevét, ahol a különböző nevű almák között akad piros alma és 100Ft/kg vagy mindegy milyen színű és olcsóbb legyen 100Ft-nál."
Erre ezt írtam:
SELECT kofa_neve FROM piac WHERE (termek = alma) AND (((szine = piros) AND (ara= 100)) OR (AND ara < 100))
Azaz:
A termék mindeféleképpen alma: termek=alma, ez egy zárójelben, mert a megfogalmazott kérdés logikai szinten való megfogalmazása esetén uúgy működik, mint matematikából tanultad: a zárójelben lévő kifejezéseket értelmezzük, számítju ki először.
Tehát a termek=alam az egy biztos fix: zárójelek között.
Finomítod a kérdésed: "akad piros alma és 100Ft"
Tehát az előző állítást finomítjuk AND kifejezéssel (ez valójában két kifejezés, s a kettő új kifejezés együtt szintén egy zárójelben).
Finomítod a kérdésed: "vagy mindegy milyen színű és olcsóbb legyen 100Ft-nál."
A mindegy milyen színűt nem kell kifejezni, mert mindegy milyen színű, azaz ebben az esetben nem tudunk rá mit mondeni, ezért ennek a mondatrésznek a logikai megfeletetéséhez nem kell írni/kifejezni semmit. Az olcsóbb legyen 100Ft-nál viszont kifejezhető. De ez (a mondat megfogalmazása szerint) vagy kapcsolatban áll piros alma és 100Ft-tal., de a termék=alama kifejezés "párjaként".
Célszerű "szépen" mefogalmazni a kérdésünket, s azt visszafejteni logika szerint.
(TRUE) AND (((TRUE) AND (TRUE)) OR (TRUE))
Az első példát elírtam a végén, helyesen:
SELECT kofa_neve FROM piac WHERE (termek = alma) AND (((szine = piros) AND (ara= 100)) OR (ara < 100))
A konrét kérdésedre a válasz: a zárójeles egységek a matematikai kiértékelés szabályainak megfelelően viszonyulnak egymáshoz.
Remélem érthető voltam... :)
Matematikai kiértékelés szabályai szerint
Köszönöm a részletes magyarázatot! Teljesen világos! Legfőképpen a "Szépen megfogalmazott kérdés" tette heylre a zavart gondolataimat!
Köszi!
s_volenszki
SELECT WHERE logikai felépítése
Örülök, hogy segítettem, attól féltem a végére még jobban összezavarlak.
;-)
Bye.
SELECT a WHERE feltételben
nem akartam új témát nyitni, és lehet, h ide illik vmennyire, amit szeretnék kérdezni.
Van egy táblám, amiben játékok részei vannak lementve.
Van egy mező, amiben le tárolva van az 1. rész, és egy másik, amiben a hozzá tartozó részek. Az 1. rész önmagához is kapcsolva van, így egy 2. mező kiolvasással az összes részt ki tudom olvasni.
Csak az a baj, hogy üreset ad vissza, az a parancs, amivel próbálkozom.
Ugyanis 1db SELECT-tel szeretném kiolvasni a részeket, mégpedig olyan gondolatmenet szerint, hogy:
"olvasd ki azokat a részeket, amik ahhoz az 1. részhez tartoznak, amihez ez a játék is tartozik"
Ez nálam így néz ki:
SELECT PART_ALL FROM tabla WHERE PART_REF="(SELECT PART_REF FROM tabla WHERE PART_ALL='101' LIMIT 1)"
De ez üreset ad vissza, még ha a 101-es érték szerepel is a mezőben.
Lehet, hogy én akarok olyat, amit nem lehet.
De ha mégis, tudnátok segíteni?
Köszi
SELECT PART_ALL FROM tabla
IN
azért azt ideírom, hogy a LIMIT-et nem engedélyezi IN-ben :)