Get KoolPHP UI with 30% OFF!

MariaDB Sort Issue resolved with the following update.

Anthony Amolochitis
/*
 * MySQLiDataSource class of KoolGrid
 * Add this class to the MySQLiDataSource.php file and use this class as your data source.
 * Method: AddSortObject() will allow you to apply a final sort on a nested query.
 */
class MySQLiDataSource_MariaDB extends MySQLiDataSource
{    
    /**
     * In MariaDB you can not do sort in sub queries therefore you must sort outside
     * @var string
     */
    public $FinalSort = array();
    
    /**
     * Add a sort to the final query.
     * @param string $fieldName
     * @param strng $fieldOrder Use "ASC" or "DESC"     * 
     */
    public function AddSortObject($fieldName='',$fieldOrder='')
    {        
        // @param type $sortOrder Use 0 = ASC , <0 for DESC 
        $sortOrder = ($fieldOrder == "ASC" ? 0 : 2 );
        $DataSourceSort = new DataSourceSort($fieldName, $fieldOrder, $sortOrder);
        $this->FinalSort[] = $DataSourceSort ; 
    }
    
    /**
     * Check if a field sort is in the sort array already since KoolGrid columns
     * can be sorted.
     * @param DataSourceSort $DataSortObjNew
     * @return boolean
     */
    protected function IsInSortArray( &$DataSortObjNew )
    {
        //$DataSortObj = new DataSourceSort($fieldName, $fieldOrder, $sortOrder);
        foreach( $this->Sorts as $DataSortObj )
        {   // add sort objects
            if( $DataSortObj->Field == $DataSortObjNew->Field )
            {   // no duplicate fields please
                return true;
            }
        }
        return false ;
    }
    
    /**
     * MariaDB compatible
     * @param type $_start
     * @param type $_count
     * @return type
     */
    function GetData($_start=0,$_count=9999999)
    {
        //Return associate array of data
        $_tpl_select_command =  "SELECT * FROM ({SelectCommand}) AS _TMP {where} {orderby} {groupby} {limit} ";
        if( count( $this->FinalSort ) > 0 )
        {
            foreach( $this->FinalSort as $arrSort )
            {   
                // add sort objects
                if( !$this->IsInSortArray( $arrSort ) )
                {
                    $this->Sorts[] = $arrSort ;
                }
            }
        }        
           
        //Filters
        $_where = "";
        $_filters = $this->Filters;
        for( $i=0; $i < sizeof($_filters); $i++)
        {   $_where .= " and " . $this->GetFilterExpression($_filters[$i]); }
        
        if( $_where != "" )
        {   $_where = "WHERE ".substr($_where,5); }
         
        //Order
        $_orderby = "";
        $_orders = $this->Sorts;
        for($i=0;$i<sizeof($_orders);$i++)
        {   $_orderby.=", ".$_orders[$i]->Field." ".$_orders[$i]->Order; }
        
        if ($_orderby!="")
        {   $_orderby = "ORDER BY ".substr($_orderby,2); }
            
        //Group
        $_groupby = "";
        $_groups = $this->Groups;
        for($i=0;$i<sizeof($_groups);$i++)
        {
                $_groupby.=", ".$_groups[$i]->Field;
        }
        if ($_groupby!="")
        {
                $_groupby = "GROUP BY ".substr($_groupby,2);
        }
        
        //Limit
        $_limit = "LIMIT ".$_start." , ".$_count; 		
        $_select_command = str_replace("{SelectCommand}",$this->SelectCommand,$_tpl_select_command);
        $_select_command = str_replace("{where}",$_where,$_select_command);
        $_select_command = str_replace("{orderby}",$_orderby,$_select_command);
        $_select_command = str_replace("{groupby}",$_groupby,$_select_command);
        $_select_command = str_replace("{limit}",$_limit,$_select_command);
        $_result = mysqli_query($this->_Link, str_replace(';', ' ', $_select_command) ); // $_select_command
        $_rows = array();
        if( $_result ) {
            while ($_row = mysqli_fetch_assoc($_result)) 
            {
                foreach ($_row as $_column => & $_value)
                    $_value = $this->getMappedValue($_value, $_column);
                            array_push($_rows,$_row);
            }
        }
        return $_rows;
    }
        
}
Posted Jun 27, 2022 Kool
Anthony Amolochitis
Example usage of the class.
   /**
     * Function to setup all queries.
     */
    protected function SetupQueries()
    {   
        $this->MySQLiDataSource->SelectCommand = $this->GetSelectStatement();
        $this->MySQLiDataSource->AddSortObject('responseType', 'DESC');
        $this->MySQLiDataSource->AddSortObject('tstamp', 'ASC');
    }
Posted Jun 27, 2022 Kool
Alex
Οι προγραμματιστές στην Ελλάδα που εργάζονται με βάσεις δεδομένων MariaDB αναζητούν συχνά λύσεις για τη σωστή ταξινόμηση δεδομένων σε σύνθετα ερωτήματα. Το duo spin casino παρέχει ένα τεχνολογικά εξελιγμένο περιβάλλον που λειτουργεί με την ίδια ακρίβεια και αποτελεσματικότητα που απαιτεί ένας σωστά δομημένος κώδικας. Αυτή η πλατφόρμα εστιάζει στη βελτιστοποίηση των λειτουργιών της, εξασφαλίζοντας μια ομαλή και αξιόπιστη εμπειρία για κάθε χρήστη που εκτιμά τη σωστή οργάνωση των δεδομένων.
Posted Jan 23 Kool