Du skal hente vidt forskellig data ud - så selvfølgelig skal du have forskellige queries.
Tiden det tager at tjekke en if i PHP er ikke værd at tale om. Du kan nå at løbe 1000 if-else igennem på samme tid som du kan hente 5 queries ud af en database...
Jeg forstår ikke hvordan du har tænkt dig at de tre ovenstående skulle blive til én query.
Du kan genbruge dele af den, ved at lave en query builder. Hvis du har alle kolonner i samme tabel, og altid skal bruge samme udsnit, så kan du lave en funktion som tager et array af parametre of derefter bygger din query.
- <?php
-
- function queryBuilder($array) {
- $baseQuery = 'SELECT rows FROM table';
- $cond = array();
-
- foreach ($array as $a) {
- if ($a[2]) {
- $cond[] = ' '.$a[0].' = '.$a[1];
- } else {
- $cond[] = ' '.$a[0].' = \''.$a[1].'\'';
- }
- }
-
- return $baseQuery . ' WHERE' . implode(' AND', $cond);
- }
-
- $conditions = array(
- array('a','b'),
- array('date', 'CURDATE()',true)
- );
-
- echo queryBuilder($conditions);
- // outputs: SELECT rows FROM table WHERE a = 'b' AND date = CURDATE()
Du kalder din funktion med et array af arrays som har følgende struktur: række, værdi, undlad quotes om værdi (default false)
Så alle dine cases skal kun bygge et condition array - fx case 3:
- $conditions = array(
- array('AREA', $area),
- array('cat_id', $cat_id),
- array('datefield', $thisweek)
- );
Evt kan du udbygge den til at du kan specificere operatorer også...
Indlæg senest redigeret d. 03.09.2012 18:43 af Bruger #17015