Cibiņš Posted November 9, 2011 Report Share Posted November 9, 2011 (edited) Veidoju droplistu sarakstu meklēšanas kritērijiem: Ir sekojošie lauki: Research - droplist - $pat_rsrch; Date -FROM - $date1 un UNTIL $date2 ; User - droplist - $pat_usr; Patient ID droplist - $pat_ptid; Site ID droplist - $pat_std; BET - pašlaik ir jautājums - kā izveidot kvēriju lai meklēšana notiek piemērampēc viena vai vairākiem kritērijiem, ja pārējie lauki ir uzsetoti uz ALL, kur uz ALL padošanu atlasa visus ierakstus vai ja padod gan tukšu lauku datumos un ALL uz droplistiem lai atlasa PILNĪGI visus ierakstus?? Pašreizējais kvērijs kas atlasa ierakstus pēc visiem nosacījumiem: $rcrds = mysql_query("SELECT * FROM log WHERE research_id='$pat_rsrch' AND user_id='$pat_usr' AND patient_id='$pat_ptid' AND site_id='$pat_std' AND date >= '".$date1."' AND date <= '".$date2."'")or die(mysql_error()); Edited November 9, 2011 by Cibiņš Link to comment Share on other sites More sharing options...
Kemito Posted November 9, 2011 Report Share Posted November 9, 2011 Nu varbūt uztaisi pārbaudes, un vienā variantā ja if`s ir tāds, tad notiek darbība pēc viena principa, savādāk pēc cita ? Link to comment Share on other sites More sharing options...
Cibiņš Posted November 9, 2011 Author Report Share Posted November 9, 2011 Nu varbūt uztaisi pārbaudes, un vienā variantā ja if`s ir tāds, tad notiek darbība pēc viena principa, savādāk pēc cita ? Nu tad tur jāliek da*uja ifi un elši..kautkādu vienkāršāku paņēmienu vaig.. Link to comment Share on other sites More sharing options...
waplet Posted November 9, 2011 Report Share Posted November 9, 2011 (edited) $nosacijumi = '' if(...){ $nosacijumi = "where ,,...." } if.... $nosacijumi .= "limit $mainigais,$lala order by $lala" utt.. Edited November 9, 2011 by waplet Link to comment Share on other sites More sharing options...
Gints Plivna Posted November 9, 2011 Report Share Posted November 9, 2011 Interesanti, ka neatradu tādu jauku apkopojošu rakstu ar paskaidrojošiem argumentiem kā un kāpēc eleganti to darīt MySQLā. Es zinu kā to darīt labi un pareizi iekš SQL Server un Oracle (un ir raksti par to), bet cik es saprotu, tad MySQLā īsti nav tāda lieta kā kopējs query kešs ko šārē vairākas konekcijas, līdz ar to var rīkoties, kā teica waplet. - Ir SELECT daļa, kas visiem vienāda, - ir join daļa, ko papildina tad, ja ir netukši kritēriji no citām tabulām, ja kritēriji tikai vienai tabulai tad tādu nevajag - ir where klauza, kuru dinamiski papildina, ja kāds no kritērijiem ir netukšs, lai nebūt jāsatraucās vai pirms tam kāds kritērijs ir bijis vai nē, tad sākumā where klauza = 'WHERE 1 = 1 ' un pēc tam tik netukšajiem kritērijiem met klāt ' AND kolona = $vērtība' - ir order by klauza, kura, ja nevar izvēlēties dinamiski vienmēr ir viena. Tātad mīnuss it kā ir tas, ka katru reizi vaicājumu parsē atkal un atkal, bet nezinu kā to īsti tur risina, un, ja lietotāju nav mega daudz, tad par to var neuztraukties. Pāris relatīvi jēdzīgas tēmas par to pašu problēmu bija šeit: http://stackoverflow.com/questions/7476611/how-to-write-a-query-with-a-dynamic-where-clause http://forums.mysql.com/read.php?52,430828,430945#msg-430945 Gints Plivna http://datubazes.wordpress.com Link to comment Share on other sites More sharing options...
codez Posted November 9, 2011 Report Share Posted November 9, 2011 Varbūt jāsāk ar programmēšanas pamatu apgūšanu, piemēram, stringu konkatēšanu? Link to comment Share on other sites More sharing options...
Mr.Key Posted November 10, 2011 Report Share Posted November 10, 2011 (edited) Varbūt jāsāk ar programmēšanas pamatu apgūšanu, piemēram, stringu konkatēšanu? Konkatenēšana. Concat ir saīsinājums no concatenate. Bet vispār, [teksta] virkņu savienošana. Nu tad tur jāliek da*uja ifi un elši..kautkādu vienkāršāku paņēmienu vaig.. Krievi glabā pazemē lielus pārtikas krājumus un veic misijas uz marsa... Tas viss tāpēc, ka zemei uz īsu brīdi pietuvosies planēta, kurā pilnīgi viss būs vienkārši! Ja nopietni, kā tad tu domāji, ka ir kāds maģiskais risinājums? p.s. Kādreiz tiku tādu taisījis, tieši tā, kā Gints aprakstīja. Edited November 10, 2011 by Mr.Key Link to comment Share on other sites More sharing options...
Aleksejs Posted November 10, 2011 Report Share Posted November 10, 2011 Galvenais, lai beigās nesanāk kaut kas šāds: http://thedailywtf.com/Articles/The-Query-of-Despair.aspx Link to comment Share on other sites More sharing options...
draugz Posted November 10, 2011 Report Share Posted November 10, 2011 (edited) Ja tev nepatīk daudz ifi, tad vari mēģināt taisīt izvirtības! piemēram: $where = ' 1=1'; $query_fields = array('pat_rsrch'=>'research_id','date1'=>'date','date2'=>'date','pat_usr'=>'user_id','pat_ptid'=>'patient_id','pat_std'=>'site_id'); foreach($query_fields as $value=>$field){ if(!empty($$value)){ $where.=" AND `{$field}` = '{$$value}'"; } } $rcrds = mysql_query("SELECT * FROM log WHERE {$where}")or die(mysql_error()); Par sintaksi nevaru garantēt, bet ideja ir aprakstīt visus php mainīgos un norādīt mysql kolonu. Pēc tam ciklā vienkārši pārbauda vai šī vērtība ir uzsetota un ja ir, tad pieliek where nosacījumu. Uzmanību, piemēram $pat_rsrch = 0 tiks uzskatīts par neeksistējošu vērtību! Edited November 10, 2011 by draugz Link to comment Share on other sites More sharing options...
briedis Posted November 10, 2011 Report Share Posted November 10, 2011 fuuuuuu, variable variables suuuck! Noteikti var labāk. Link to comment Share on other sites More sharing options...
draugz Posted November 10, 2011 Report Share Posted November 10, 2011 Šeit, jau netika jautāts kā būtu labāk :) cilvēks, gribēja sev sarežģīt dzīvi :) Savām vajadzībām, ja nu ko līdzīgu izmantotu, tad tikai lai no $_POST vai $_GET ielasītu pa tiešu un tajā pašā vietā arī escape uztaisītu. Link to comment Share on other sites More sharing options...
daGrevis Posted November 10, 2011 Report Share Posted November 10, 2011 Kohanai (atkal, jā) ir tāda lieta kā Query Builder. Tad var iztikt par bez stringu savbienošanas: $query = DB::select('a', 'b')->from('x'); if (!empty($y)) { $query->where('y', '=', $y); } else if (!empty($z)) { $query->where('z', 'LIKE', $z); } $result = $query->execute()->as_array(); Link to comment Share on other sites More sharing options...
codez Posted November 10, 2011 Report Share Posted November 10, 2011 Kohanai (atkal, jā) ir tāda lieta kā Query Builder. Tad var iztikt par bez stringu savbienošanas: Kas tad cits tiek darīts tajā query builderī, ja ne virkņu savienošana? Link to comment Share on other sites More sharing options...
marrtins Posted November 10, 2011 Report Share Posted November 10, 2011 fuuuuuu, variable variables suuuck! Koa? o_O Pārāk liels dinamiskums? Nu tad back to the C! Link to comment Share on other sites More sharing options...
briedis Posted November 10, 2011 Report Share Posted November 10, 2011 Pārāk sūdīga atkļūdošana... IDE arī nevar normāli izsekot līdzi mainīgajiem... Link to comment Share on other sites More sharing options...
Recommended Posts