Jump to content
php.lv forumi

Viltiigais WHERE


Ugabuga

Recommended Posts

Lieta taada, ka ir tabula ar datiem, gribas uztaisiit filtreeshanu. Triis selekti zem tabulas, piemeeram paraadiit lietotaajus, kas online, lietotaajus ar noteiktu dzimumu, lietotaajus ar noteiktu statusu (juuzers, admins..)

 

Tik taalu viss vienkaarshi. Bet gribas lai filtreet var vairaak nekaa peec viena nosaciijuma, piemeeram:

 

paraadiit lietotaajus, kas ir admini un online

vai

lietotaajus, kas ir viirieshu dzimuma

vai

vai lietotaajus, kas ir admini, sievieshu dzimuma un nav online.

 

Domaaju, ka jaabuut labaakam veids, kaa rakstiit astonjus IFus astonjiem dazhaadiem kverijiem. Un ja piemet veel ceturto nosaciijumu, tad vispaa traks var palikt.

 

Shaa taa paprobeejos, pakjeepaajos, bet pagaidaam nav nekas jeedziigs padevies, piemeeram doma, ka to kveriju ver buuveet pa daljaam, noskaidrot vai isset kaads nosaciijums un rakstiit to nosaciijums=".." vai nee, bet sanaak muhlis ar WHERE un AND attieciigi dazhaadaas kombinaacijaas un nekas labs tur galaa nav sanaacis. Tad vajag veidu, kaa peec WHERE dabuut nosaciijumu peec kura atlasaas visi attieciigie lauki un iisti praats nevelk, vai maz kkas taads pastaav.. vai arii es te akal braucu uz Riigu caur Maskavu..

 

Any ideas?

Link to comment
Share on other sites

kaapeec tev leikas, ka ar isset() ir slikts variants?. es gan isset() vietaa ieteiktu izmantot empty().

domaa praatiigaak ir katram variantam rakstiit savu kveriju?

 

$where .= !empty($_POST['kol']) ? "kol={$_POST['kol']}" : '';

Link to comment
Share on other sites

Es daru kautkā šādi:

$where = array('1');
$conditions = array(
 $condition1 => "param1=value1",
 $condition2 => "param2=value2",
 ...);
foreach($conditions as $cond => $param) {
 if ($cond) {
$where[] = $param;
 }
}
$sql = "SELECT * FROM tabule WHERE " . implode(" AND ", $where);

Edited by bubu
Link to comment
Share on other sites

Probleema bija ar AND un WHERE.

 

Piemeeram, ja netiek nekas filtreets, tad kverijaa WHERE un to, kas tam seko vispaa nevaik.

SELECT * FROM tabula ORDER BY vards ASC

 

Ja tiek mekleets peec visiem nosaciijumiem tad ir

SELECT * FROM tabula WHERE pirmais=".." AND otrais=".." AND treshais=".." ORDER BY vards ASC

 

tad kaa pareizi sakombineet un salikt tos lai piemeeram, ja netiek mekleets peec pirmaa, bet tikai peec otraa vai treshaa vai abiem nosaciijumiem, tas liekais AND neparaadaas. Un ja nekas tiek filtreets, lai WHERE ar protaas.

 

Variants ir vnk ja kaads kriteerijs nav noraadiits vinja vietaa aiz WHERE ielikt nevis kriteerijs = "kaut kas", bet kriteerijs != "kaut kas".. Brr..

Link to comment
Share on other sites

×
×
  • Create New...