mysql select - kde je chyba?

Programovacie jazyky, rady, poradňa...
casper_irs
Novice
Novice
Príspevky: 4
Registrovaný: 06 sep 2005, 21:12

mysql select - kde je chyba?

Príspevok od používateľa casper_irs »

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
etel
Light Star
Light Star
Používateľov profilový obrázok
Príspevky: 232
Registrovaný: 16 okt 2006, 10:37
Kontaktovať používateľa:

Príspevok od používateľa etel »

ja som mal takyto problem tiez a vzdy to bolo len chybou nespravneho formatovania casu pri pridavani udajov do db ...
casper_irs
Novice
Novice
Príspevky: 4
Registrovaný: 06 sep 2005, 21:12

Re: mysql select - kde je chyba?

Príspevok od používateľa casper_irs »

etel napísal:ja som mal takyto problem tiez a vzdy to bolo len chybou nespravneho formatovania casu pri pridavani udajov do db ...
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 >=
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 )
casper_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
no takze uz mi to ide

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 ";
michald
Light Expert
Light Expert
Príspevky: 51
Registrovaný: 05 aug 2005, 16:20
Kontaktovať používateľa:

Príspevok od používateľa michald »

co tak pouzit toto:

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 
taketo mnozinove operacie su pre SQL to prave orechove a vsetko pekne v jednom prikaze :-)
Napísať odpoveď