Autor Zpráva
H13
Profil
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
H13 - a tá podmienka je aká? Čo chceš vlastne dosiahnuť?
Mastodont
Profil
Já to chápu jako
SELECT * FROM tabulka WHERE ( (podminka = 1 AND jmeno = "Jan") OR (podminka = 0 AND jmeno = "Petr") )
H13
Profil
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
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
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
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
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
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
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
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

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0