dobry den...
mam jeden problem so selectom
mam jednu tabulku 'dovolenky' v ktorej su ulozene zaznamy
vo formulari mam na vyber zobraz vsetkych ludi, potom su tam na vyber oddelenia
alebo jednotlivy uzivatelia. dalsie kriterium je podla datumov.
Ked dam vsetko alebo jednotlivych uzivatelov tak to ide ale ked dam nejeke to
oddelenie tak to nejde...teda tych ludi or vypise ale uz neurobi ten rozsah
datumov ak je zadany
tu je ten select
//zakladny select
$sql="SELECT id, person_id, date_from, to_date, days, place, type FROM holidays
WHERE type=".$_POST['type']." ";
//tento select musi najst v druhej tabulke tych ludi ktori patria do toho
oddelenia
$sql1="SELECT person_id FROM person WHERE person_department='047220' AND
person_active='1'";
$res=array_query($sql1);
// tento cyklus mi da vsetkych uzivatelov daneho oddelenia
for($h=0; $h<count($res);$h++)
{$u[$h]='person_id='.$res[$h]['person_id'];}
spojim to do jednej premennej
$people='AND ('.join(' OR ',$u).') ';
a prida k povodnemu prikazu
$sql=$sql.$people;
a vysledok po vypisani je takyto:
SELECT id, person_id, date_from, to_date, days, place, type FROM holidays WHERE
type=1 AND (person_id=401445 OR person_id=400057 OR person_id=402985 OR
person_id=401154 OR person_id=402444 OR person_id=400244 OR person_id=402603 OR
person_id=401736 OR person_id=400768 OR person_id=403696 OR person_id=401151 OR
person_id=400205 OR person_id=400280 OR person_id=406242) AND to_date >=
1237158000 ORDER BY date_from DESC
chyba je taka ze uz zrejme neberie do uvahy aj porovnavanie podla toho to_date
lebo mi vypise vsetky zaznamy tychto userov...
Viete niekto ako nato prosim?
Dakujem za odpoved ak sa niekto najde
mysql select - kde je chyba?
-
casper_irs
Novice
- Príspevky: 4
- Registrovaný: 06 sep 2005, 21:12
Re: mysql select - kde je chyba?
tu to ale nebude casom... ja mam tie datumy ulozene ako string a ukladam tm mktime cize unix time...select podla neho mi funguje ale iba v pripade jedneho usera...ak chcem prehladavat ludi z rovnakeho oddelenia tak uz to radenie na konci podla datumu uz nezoberie. cize vyberie kazdemu jednemu vsetky zaznamy ale tuto podmienku uz neurobi AND to_date >=etel napísal:ja som mal takyto problem tiez a vzdy to bolo len chybou nespravneho formatovania casu pri pridavani udajov do db ...
1237158000...mozno to treba cez dva prikazy alebo nejak inak... ja by som to mal ale najradsej v jednomak by sa dalo..lebo potom bude este nato nazdvazovat strankovanie zaznamov
//autoeditácia príspevku ( 08 Mar 2009, 22:47 )
no takze uz mi to idecasper_irs napísal:dobry den...
mam jeden problem so selectom
mam jednu tabulku 'dovolenky' v ktorej su ulozene zaznamy
vo formulari mam na vyber zobraz vsetkych ludi, potom su tam na vyber oddelenia
alebo jednotlivy uzivatelia. dalsie kriterium je podla datumov.
Ked dam vsetko alebo jednotlivych uzivatelov tak to ide ale ked dam nejeke to
oddelenie tak to nejde...teda tych ludi or vypise ale uz neurobi ten rozsah
datumov ak je zadany
tu je ten select
//zakladny select
$sql="SELECT id, person_id, date_from, to_date, days, place, type FROM holidays
WHERE type=".$_POST['type']." ";
//tento select musi najst v druhej tabulke tych ludi ktori patria do toho
oddelenia
$sql1="SELECT person_id FROM person WHERE person_department='047220' AND
person_active='1'";
$res=array_query($sql1);
// tento cyklus mi da vsetkych uzivatelov daneho oddelenia
for($h=0; $h<count($res);$h++)
{$u[$h]='person_id='.$res[$h]['person_id'];}
spojim to do jednej premennej
$people='AND ('.join(' OR ',$u).') ';
a prida k povodnemu prikazu
$sql=$sql.$people;
a vysledok po vypisani je takyto:
SELECT id, person_id, date_from, to_date, days, place, type FROM holidays WHERE
type=1 AND (person_id=401445 OR person_id=400057 OR person_id=402985 OR
person_id=401154 OR person_id=402444 OR person_id=400244 OR person_id=402603 OR
person_id=401736 OR person_id=400768 OR person_id=403696 OR person_id=401151 OR
person_id=400205 OR person_id=400280 OR person_id=406242) AND to_date >=
1237158000 ORDER BY date_from DESC
chyba je taka ze uz zrejme neberie do uvahy aj porovnavanie podla toho to_date
lebo mi vypise vsetky zaznamy tychto userov...
Viete niekto ako nato prosim?
Dakujem za odpoved ak sa niekto najde
stacilo tam dat in namiesto tych OR
teraz je to takto keby mal niekto niekedy podobny problem
$sql1="SELECT person_id FROM person WHERE person_department='047220' AND person_active='1'";
$res=array_query($sql1);
for($h=0; $h<count($res);$h++){$u[$h]=$res[$h]['person_id'];}
$people=join(', ',$u);
$sql=$sql." WHERE person_id in ( ".$people." ) AND to_date >=
1237158000 ORDER BY date_from DESC ";
co tak pouzit toto:
taketo mnozinove operacie su pre SQL to prave orechove a vsetko pekne v jednom prikaze 
Kód: Vybrať všetko
SELECT id, person_id, date_from, to_date, days, place, type FROM holidays WHERE
type=1 AND person_id in (SELECT person_id FROM person WHERE person_department='047220' AND person_active='1') AND to_date >=
1237158000 ORDER BY date_from DESC