Nueva pregunta

Pregunta:

Fecha: 08-04-2015 14:30:06 (En Español)

¿Cómo hacer un select from a mysql parametrizable?[Resuelta]

Hola comunidad , con una duda quiero hacer un select from parametrizable.

Me explico yo enviandole solamente el table_name de cualquiera de mis tablas de mi DB me construya un array con el resultado [nameColumn] => '$valueColumn'.

Este es mi codigo


 static function select($table, $columns, $columnWhere, $valueWhere) {

        //Construye el query
        if($columnWhere == "*" && $valueWhere == "*"){
            $qrySelect = "SELECT ".$columns." FROM ".$table;
        }else{
            $qrySelect = "SELECT ".$columns." FROM ".$table." WHERE ".$columnWhere." = '".$valueWhere."'";
        }
        
        //Ejecuta el query
        $resultadoSelect = serviceweb::obtenerQuery($qrySelect);
        
        //Agrega el resultado a un array
        if(mysql_num_rows($resultadoSelect) != 0){
            while ($fila = mysql_fetch_assoc($resultadoSelect)) {

//TODO:Aqui construyo un array , pero no se como hacer que baya agregando los nombres de las columnas
//automaticamente xq ahora solo estoy agregando el id y nombre como se podran dar cuenta.

            $arrayResultados[] = array(
                'Id' => $fila['id'],
                'Nombre' => $fila['nombre']);
            }   
        }        
        
        $resultado = json_encode($arrayResultados);        
        echo $resultado;         
    }


Gracias , les agradecería su ayuda bastante.
Etiquetas: MySQL - MySQL Desarrollo - PHP - Pregunta - Query - SQL Votos: 0 - Respuestas: 2 - Vistas: 16 Compartir en: Google Facebook Twitter LinkedIn Link
 

Respuestas:

  • Fecha: 09-04-2015 07:22:59 Yo lo que hago es separar la lógica en dos partes, una para construcción del query y otra para la extracción de datos..

    por ejemplo de un formulario que tiene 3 campos, digamos Search(text), from(date), to(date)

    Creo un modelo con los métodos necesarios para generar el query...
    (estoy usando laravel, con eloquent)

    <?php namespace App\Models;
    
    use Eloquent;
    use DB;
    
    class Orders extends Eloquent {
    	protected $connection = 'sqlsrv'; 
    	protected $table = 'Orders';
    
    
    	public static function getOrders($data=array()){
            $order = new Orders;
            
          
            $query = DB::connection($order->connection)
                            ->table($order->table)
                            ->select('OrderNumber'
                                     ,'SourceOrderNumber'
                                     ,'PONumber'
                                     ,DB::raw('CAST(OrderDate as date) AS OrderDate')
                                     ,'OrderStatus'
                                     ,'CustomerID'
    			                     ,'CartID'
    			                     ,'Shipping'
    			                     ,'ShipName'
    			                     ,DB::raw('[Inventory].[dbo].fn_WebOrder_LabelStatus(SourceOrderNumber) as LabelStatus')
    			                     ,DB::raw('[Inventory].[dbo].fn_WebOrder_CancelRequest(SourceOrderNumber) as CancelRequest')
    			                     ,'OrderInst'
                                    );
                            
            return $query;
        }
    
    
    
        public static function getBetweenDates($query, $data){
    
            $from = (!empty($data['from'])) ? $data['from'] : date("m/d/Y", strtotime("yesterday"));
            $to = (!empty($data['to'])) ? $data['to'] : date("m/d/Y");
    
            return $query->whereBetween('OrderDate',array($from, $to));
        }
    
    
    
    
        public static function getSearch($query, $data, $fields){
    
            $search = $data['search'];
    
            if (!empty($search)){
    
                $query->where(function($query) use ($search, $fields) {
    
                    foreach ($fields as $field) {
                         $query->orWhere($field, 'LIKE', "%".$search."%");
                    }              
    
                });   
            }  
                     
            return $query;
        }
    
    
    }
    
    



    Si observas, cada método genera un agregado al query.

    Ahora desde el controlador podemos empezar a llamara a los metodos y generar el query, dependiendo de lo que tengamos en el formulario de búsqueda el cual es pasado serializado al controlador

    
    public function getGrid() 
    	{
                    $page 	= Input::get('page');
    		$limit 	= Input::get('rows');
    		$sidx 	= Input::get('sidx');
    		$sord 	= Input::get('sord');
             
                  //Separamos los datos que vienen serializados en desde el formulario
    		parse_str(Input::get('data'), $data);
    
                    //Creamos un arreglo con los campos donde buscaremos si el campo Search tiene algo.
    		$fieldSearch= array('OrderNumber','SourceOrderNumber','PONumber','OrderStatus','CustomerID','CartID','Shipping','ShipName');
    
    
                   //Comenzamos a construir el query
    		$orders = Orders::getOrders();
    		$orders = Orders::getBetweenDates($orders,$data);
    		$orders = Orders::getSearch($orders,$data,$fieldSearch);
    
    		$count 	= $orders->count();
                     //Realizamos una serie de calculos para el grid
    
    		$totalPages     = GridExtraData::totalPages($count,$limit);
    		$page 		= GridExtraData::page($page,$totalPages);
    		$start 		= GridExtraData::start($limit,$page);
    
                    //Extraemos los datos
    		$orders = $orders->skip($start)->take($limit)->get();
    
            //enviamos los datos a la vista..      
           	return Response::json(array('page' => $page,'total' => $totalPages, 'records' => $count,'rows'=>$orders));
    	}
    
    




    Y de esta forma tenemos un consulta parametrizada, totalmente funcional, que permite filtrar por rango de fechas, y busca en varios campos a la vez lo que se escriba en el campo de Search..

    Saludos espero te ayude...
      Votos: 2 - Link respuesta
     
  • Fecha: 09-04-2015 08:31:16 Gracias, vos buena onda si me diste una idea de como hacerlo gracias :D   Votos: 0 - Link respuesta
     
Para participar activamente de la comunidad primero debes autenticarte, ingresa al sistema.Iniciar Sesión
 
frjcbbae garagebible.com