MySQL Sortering
Regins Corner...  
 
  Freelance | Søgemaskine-optimering | Referencer | PHP Scripts | Nyheder | Sitemap  
   Mails fra PHP
   Dropdowns - Selects
   Upload med PHP
   MySQL Sortering
   Du er her
   Paging
   Træstruktur
   Tilfældigt kodeord
   Headers håndtering
   Procentbar
   Dansk dato format
   Tell a friend
   Google placering

MySQL Sortering

Ofte skal man sortere et MySQL-udtræk på flere forskellige måder for at gøre dette nemmere har jeg udviklet klassen sqlSort.

<?php
/*
EXAMPLE:
$sort = new sqlSort(array('id','name'),'id','order','dir','DESC');
$sql = "SELECT * FROM names where 1 ".$sort->sql();
$result = mysql_query($sql);
if(mysql_num_rows($result))
{
    echo 'Sort: '.$sort->link('id','by id').' | '.$sort->link('name','by name').'<br>';
    while($row = mysql_fetch_array($result))
    {
        echo $row['id'].': '.$row['name'].'<br>';
    }
}
*/
class
sqlSort
{
    var
$root
;
    var
$startDir
;
    var
$dirVar
;
    var
$orderVar
;
    var
$currentDir
;
    var
$currentOrder
;
    var
$sorts
;
    var
$subjects
;
    
    function
sqlSort(
$subjects=array('id'),
$defaultOrder='id',
$orderVar='order',
$dirVar='dir',
$startDir='DESC'
)
    {
        
$a = explode('?',$_SERVER['REQUEST_URI'
]);
        
$this->root = 'http://'.$_SERVER["HTTP_HOST"].$a[0
];
        
$this->subjects
= array();
        foreach(
$subjects as $k => $v
)
        {
            
$this->subjects[$v]=$v
;
        }
        
$this->orderVar = $orderVar
;
        
$this->sorts = $sorts
;
        
$this->dirVar = $dirVar
;
        
$this->startDir = $this->keep($startDir
);
        
        
//Finds the current direction
        
$this->currentDir = $this->keep($_GET[$dirVar
]);
        
$this->currentOrder = $_GET[$orderVar]=='' ? $defaultOrder : $_GET[$orderVar
];
        if(!
$this->subjects[$this->currentOrder
])
        {
            
$this->currentOrder = $defaultOrder
;
        }
    }
    
    function
makePath($subject
)
    {
        if(
$this->subjects[$subject
])
        {
            
$str = $this->root.'?'
;
            foreach(
$_GET as $k => $v
)
            {
                if(
$k==$this->dirVar || $k == $this->orderVar
)
                {
                    
//do nothing!
                
}
                else
                {
                    
$str .= $k.'='.urlencode($v).'&amp'
;;
                }
            }
            if(
$subject==$this->currentOrder
)
            {
                
$dir = $this->swap($this->currentDir
);
            }
            else
            {
                
$dir = $this->startDir
;
            }
            
$str .= $this->dirVar.'='.$dir.'&amp;'.$this->orderVar.'='.$subject
;
            return
$str
;
        }
        else
        {
            return
''
;
        }
    }
    
    function
link($subject,$text
)
    {
        return
'<a href="'.$this->makePath($subject).'">'.$text.'</a>'
;
    }
    
    function
keep($var
)
    {
        
$var = strtoupper($var
);
        
$var = $var == 'ASC'?'ASC':'DESC'
;
        return
$var
;
    }
    
    function
swap($var
)
    {
        
$var = strtoupper($var
);
        
$var =  $var == 'DESC'?'ASC':'DESC'
;
        return
$var
;
    }
    
    function
sql
()
    {
        
$sql = ' ORDER BY '.$this->currentOrder.' '.$this->currentDir.' '
;
        return
$sql
;
    }
}
?>

 
 
  © Copyrights Regin Gaarsmand 2002-2007
Kontakt | ButikListen.dk | Aestetik-priser.dk | Precios-Esteticos.com | ListaDeTiendas.com | annoncelisten.dk