Autor | Zpráva | ||
---|---|---|---|
H13 Profil |
#1 · Zasláno: 4. 3. 2009, 09:26:53
Ahoj, potřeboval bych poradit s podmínkou pro dotaz v mysql.
Dejme tomu, že mám tabulku "tabulka" a v ní sloupce "id", podminka", "jmeno" a potřeboval bych vytáhnout všechny data, za předpokladu, že podmínka = 1 pak kde je jméno např. "Jan" a za předpokladu, že podmínka = 0 pak kde je jméno např. "Petr" ... Něco jako: SELECT data.* FROM tabulka AS data IF (data.podminka = 1) THEN (WHERE data.jmeno = "Jan") ELSE (WHERE data.jmeno = "Peter") AND (a zde ostatní where) Díky moc. Honza |
||
tiso Profil |
#2 · Zasláno: 4. 3. 2009, 09:54:52
H13 - a tá podmienka je aká? Čo chceš vlastne dosiahnuť?
|
||
Mastodont Profil |
#3 · Zasláno: 4. 3. 2009, 10:04:51
Já to chápu jako
SELECT * FROM tabulka WHERE ( (podminka = 1 AND jmeno = "Jan") OR (podminka = 0 AND jmeno = "Petr") ) |
||
H13 Profil |
#4 · Zasláno: 4. 3. 2009, 12:45:29
tiso
Chci dosáhnout toho, abych za pomocí jednoho složeného sql dotazu mohl zvolit různé WHERE Teoreticky bych to jednoduše udělel pomocí více dotazů: - Pomocí SELECTu bych dostal bych z databáze hodnotu podmínky (0 | 1) pro konkrétní řádek a poté bych znovu provedl SELECT dotaz: if ($radek->podminka == 0) { $where = "WHERE data.jmeno = "Peter"; } else { $where = "WHERE data.jmeno = "Jan"; } a vytvořil bych druhý SQL dotaz... Samozřejmě bych raději toto udělal pouze v jednom dotazu, když se koukám na SQL dotaz od Mastodonta, tak mě to příjde jako že by to mělo fungovat, vyzkouším a dám vědět... díky |
||
tiso Profil |
#5 · Zasláno: 4. 3. 2009, 12:58:28
H13 - mňa nezaujíma nejaký Peter, Jan ani podminka, pretože mi tieto veci nič nehovoria... Mňa zaujíma konkrétne aké dáta a odkiaľ chceš vytiahnuť... Takže štruktúra tabuliek, pár vzorových riadkov v nich a ako má vyzerať výsledok.
|
||
H13 Profil |
#6 · Zasláno: 4. 3. 2009, 13:36:40 · Upravil/a: H13
Mastodont
Vypadá to, že to funguje tiso Pomocí Petra a Jana jsem to chtěl co nejvíce zjednodušit... kdybych tady hodil tabulku o 20 sloupcích a 15 řádcích zamotanýho SQL dotazu, to by jsme se asi nedobrali výsledku vůbec Zkusím to jinak (např. zobrazení stránky registrovaným a neregistrovaným uživatelům) Tabulka "stranka" id | int stranka : char zobrazit_pouze_uvod : boolean stranka_pouze_pro_registrovane : boolean data: id | stranka | zobrazit_uvod | stranka_pouze_pro_registrovane 1 | stránka1| 0 | 1 2 | stránka2| 1 | 1 3 | stránka3| 1| 0 Tabulka uzivatel id : int registrovany : boolean id | regisrovany 1 | 1 2 | 0 Dotaz: Teď se budu zabývat pouze úvodem stránky, (celá stránka mě nezajíma, ta je přístupná pouze registrovaným) - Pokud je stránka pouze pro registrované, ukaž úvod registrovaným a ukaž úvod neregistrovaným v případě, že zobraz_uvod = true - Pokud je stránka pouze pro registrované, ukaž úvod registrovaným a neukazuj úvod neregistrovaným v případě, že zobraz_uvod = false - Pokud je stránka pro všechny, ukaž úvod registrovaným i neregistrovaným a je jedno jestli je zobraz_uvod true nebo false V tomto dotazu se budu zabývat pouze úvodem (ne celým obsahem stránky), dotaz podle Mastodonta SELECT * FROM stranka WHERE ( (zobraz_uvod = 1 ) OR (zobraz_uvod = 0 AND uzivatel = 1) ) Tedy: - pokud stránka obsahuje: zobraz_uvod = true ... pak zobraz úvod pro všechny - nebo obsahuje zobraz_uvod = false ... pak zobraz úvod pouze registrovaným Tedy by se měly z databáze vypsat všechy úvody u kterých je zobraz_uvod=true pro všechny uživatele a pro registrované i ty úvody, kde je zobraz_uvod = false Tak doufám, že jsem to moc nezamotal |
||
Alphard Profil |
#7 · Zasláno: 4. 3. 2009, 15:14:03
H13
co kdybychom prostě měli proměnnou $reg, která by měla hodnoty 0 pro neregistrovaného/nepřihlášeného a 1 pro přihlášeného a sestavili dotaz takhle where zobrazit_uvod = 1 or stranka_pouze_pro_registrovane <= $reg |
||
H13 Profil |
#8 · Zasláno: 4. 3. 2009, 17:02:24
Alphard
Ahoj, háček je v tom, že do proměnné $reg tu hodnotu, která je uložená v databázi, musíš dostat a to už vytváří další dotaz... Pro mě sql dotaz navržený Mastodontem funguje ... zatím testuju a chová se tak jak má |
||
Alphard Profil |
#9 · Zasláno: 4. 3. 2009, 17:52:04
H13
nemusím, snad vím, jestli stránku generuji pro přihlášeného nebo nepřihlášeného uživatele bez nějakého zvláštního dotazu |
||
tiso Profil |
#10 · Zasláno: 4. 3. 2009, 21:49:02
H13 - aha... Pôvodne som myslel že tam potrebuješ dostať 10 nejakých prvkov a chcel si to riešiť cez podmienky miesto použitia IN(array)
Čo sa týka toho tvojho druhého príkladu v [#6], tak registrovaného užívateľa musíš mať identifikovaného buď cez COOKIE alebo SESSION, takže tam by nebol problém s tým čo si vytýkal v [#8]. Okrem toho tie príznaky v tabuľke stránka sú podľa tvojich podmienok čiastočne závislé, ale priamo ich nereflektujú. Stačilo by tie príznaky jednoducho upraviť, napríklad takto: zobrazit_uvod premenovať na zoprazit_uvod_vsem if(stranka_pouze_pro_registrovane=0){zobrazit_uvod_vsem=1;} aby skutočne podľa názvu vystihovali svoj zmysel... A potom by to už bolo jednoduché: skutocne_zobrazit_uvod = stranka_pouze_pro_registrovane=0 or (isset($_SESSION['registrovany']) and zobrazit_uvod_vsem=0) Sorry za miešanie php a mysql... |
||
H13 Profil |
#11 · Zasláno: 5. 3. 2009, 00:38:10
tiso
díky... podívám se na opačnej přístup, jinak s tou session ano, v databází je informace o tom, zda je uživatel registrovaný a pak se informace přenáši v session |
||
Časová prodleva: 15 let
|
0