Autor | Zpráva | ||
---|---|---|---|
Jardaklon Profil * |
#1 · Zasláno: 9. 2. 2012, 22:13:04
Hezký den,
dumám nad tím jak to napsat, aby se mi vypsly z databáze z několika sloupců (kde je hodnota buď 0 nebo 1) hodnoty jedna (čili nenulové) které jsou schodné s hodnotami řádku uživatele x. V praxi má dojít k tomu, aby se konkrétnímu přihlášenému uživateli vypsaly hodnoty shodné s jeho nastavením a s hodnotami ostatních uživatelů. Takže mám třeba dva sloupce: sobota a neděle a mám dva užiavtele Honza a Anička. Uživatele si maj možnost vybrat kdy maj čas, když daj že maj čas v sobotu, tak se v sloupku sobota zapíše hodnota 1. A já chci aby se třeba Aničce zobrazilo že ve shodný den má čas i Honza. Jde tedy o hledání shody. Budu vděčný za rady. |
||
Sir Tom Profil |
Jardaklon:
Také hezký den, tipoval bych, že se jedná o špatný návrh db? (Nestačilo by do sloupce den zapsat třeba pouze název dne?) Nicméně tvůj problém bych řešil takto - vytáhnu si řádek Aničky a do proměnné (asi to bude pole) si uložím její hodnoty (jedničky a nuly). Poté sestavím sql příkaz, který bude vyhledávat řádky kde (za pomoci WHERE a AND) budou stejné hodnoty jako v poli. Např. Osoba | Dítě | Matematik | Fyzik ----------------------------------------- Lenka | 0 | 1 | 0 -> vytáhnu tento řádek a do pole si uložím hodnoty: pole = array(0, 1, 0); Elenka | 1 | 1 | 0 Helenka| 0 | 1 | 0 následuje sql dotaz: ....... WHERE Dítě = pole[0] AND Matematik = pole[1] AND Fyzik = pole[2] |
||
Kajman Profil |
#3 · Zasláno: 10. 2. 2012, 10:41:44
Sir Tom:
V dotazu by mělo být spíše or - asi hledá alespoň jeden stejný den. Jardaklon: Také bych ukládat příznaky jinak... id_uzivatele, datum, hodnota(0,1) Pak by byl dotaz ještě o chlup jednodušší. |
||
Sir Tom Profil |
#4 · Zasláno: 10. 2. 2012, 11:22:20
Kajman:
„V dotazu by mělo být spíše or - asi hledá alespoň jeden stejný den.“ Záleží jestli hledá naprosto stejný řádek, nebo řádek s alespoň jednou společnou položkou. Z dotazu to není poznat. |
||
Jardaklon Profil * |
#5 · Zasláno: 10. 2. 2012, 12:24:56
Sir Tom:
Je to tak že mám dny v týdnu jako sloupce tabulky a v každém mám 0 nebo 1. Chci aby se mi vypsala schoda třeba že má uživatel čas ve shodný den. Tzn, alespoň jedna shoda třeba pro pondělí by měla vyhodit hlášku: uživatel Honza má v pondělí také volno. Nebo tak něco. |
||
Keeehi Profil |
#6 · Zasláno: 10. 2. 2012, 12:56:46
A co tabulka o dvou sloupcích. První id_uživatele, druhý den. id_uživatele je snad jasné, v den bude číslo 1-7, pokud má ten uživatel v ten den čas. Takže záznam pro Honzu (id=300) který má volno ve ST, SO, NE by vypadal takto:
id_uzivatele | den 300 | 3 300 | 6 300 | 7 A dotaz by pak mohl vypadat nějak takto: SELECT * FROM tabulka WHERE den IN (SELECT den FROM tabulka WHERE id_uzivatele = 300) ORDER BY id_uzivatele |
||
Jardaklon Profil * |
#7 · Zasláno: 10. 2. 2012, 13:06:27
Keeehi:
Děkuji Ti. Jsem si vědom toho že návrh databáze jsem neudělal úplně správně, jsem začátečník. Až budu dělat příště podobnou, tak využiju tvé rady, ale teď už tam mám většinu napsanou s tím že počítám že každý den je samostatný sloupec. Tak právě potřebuji poradit to hledání shodnosti v řádku s ostatními. |
||
Keeehi Profil |
#8 · Zasláno: 10. 2. 2012, 13:18:11
|
||
Kajman Profil |
Případně jedním dotazem, nějak takto...
select cil.uzivatel, (vzor.pondeli & cil.pondeli) po, (vzor.utery & cil.utery) ut, (vzor.streda & cil.streda) st from tabulka as vzor join tabulka as cil on vzor.uzivatel != cil.uzivatel and ((vzor.pondeli & cil.pondeli) or (vzor.utery & cil.utery) or (vzor.streda & cil.streda) ) where vzor.uzivatel = 'Anička' Ale s rozumným návrhem tabulky by to bylo opravdu o dost jednodušší. |
||
Jardaklon Profil * |
#10 · Zasláno: 10. 2. 2012, 14:32:05
Kajman:
Děkuji moc. |
||
Časová prodleva: 12 let
|
0