2

JqueryBootgrid プラグインと PHP をバックエンド コードとして使用して、Web サイトにグリッドを作成しています。「ユーザー」のグリッドをバインドし、追加、削除、および編集用のボタンを追加できます。それは正しく機能します。問題は次の表にあります。

テーブル製品

id_producto (PK) nombre descripcion_larga descripcion_corta imagen imagen_logo ストック id_categoria (FK)

テーブル precios_productos

id_precio (PK) fecha_precio プレシオ id_producto (FK)

表のカテゴリ

id_categoria (PK) の説明

すべての製品を最新の「現在の」価格で表示するグリッドを作成したいと考えています。そのため、phpMyAdminで適切に機能し、最新の価格で適切な製品を返す一時テーブルを使用してクエリを実行しました。しかし、このクエリは私の php コードでは機能しないため、グリッドも機能しません。

クエリ:

 CREATE TEMPORARY TABLE IF NOT EXISTS fec_val AS (SELECT pre.id_producto, max(pre.fecha_precio) fecha FROM precios_productos pre GROUP BY pre.id_producto); SELECT p.id_producto, p.nombre, p.descripcion_larga, p.descripcion_corta, cat.descripcion, p.imagen, p.stock, p.imagen_logo, pre.precio FROM fec_val fv INNER JOIN productos p ON fv.id_producto = p.id_producto INNER JOIN precios_productos pre ON pre.id_producto = p.id_producto INNER JOIN categorias cat ON cat.id_categoria = p.id_categoria WHERE pre.fecha_precio = fv.fecha

そして、ここにブートグリッドの完全な php コード バックエンドがあります。

<?php try {

    //Configuracion de la base de datos

    $hostname = "localhost";
    $username = "facundo";
    $password =  "******";
    $database  = "facundo";
    

    $conn = new PDO("mysql:host=localhost;dbname={$database}", $username, $password);

    //Parametro de la consulta

    $search         = "";
    $where      = "";
    $order_by       = "id_producto";        
    $rowCount   = 10;//Cantidad de resultados por default
    
    
    //Envia parametros adicionales en el pack json 
    $debug          = TRUE;

    
    //Obtengo la cantidad de resultados para mostrar por pagina
    
    if (! empty( $_REQUEST['rowCount']))
    {
        $rowCount = $_REQUEST['rowCount'];
    }
    
    //calculate the low and high limits for the SQL LIMIT x,y clause
    if ( !empty($_REQUEST['current']) )
    {
        $current        =   $_REQUEST['current'];
        $limit_lower    =   ($current * $rowCount) - ($rowCount);
        $limit_hight    =   $limit_lower + $rowCount;
    }
    
    if ($rowCount   ==  -1)
    {
        $limit=""; //no limit
    }else{
        $limit = "LIMIT {$limit_lower},{$limit_hight}"; 
    }


    //Genera el order by 
    if (isset($_REQUEST['sort']) && is_array($_REQUEST['sort']) )
    {
        $order_by= "";
        
        foreach($_REQUEST['sort'] as $key=> $value)
            {
                    $order_by.="{$key} {$value}";
            }
    }

    
    //Buscador
    $search_phrase = $_REQUEST['searchPhrase'];
    
    
    if (!empty($search_phrase))
    {
        
        $search = trim($search_phrase);
        
        $where  = "WHERE pre.fecha_precio = fv.fecha OR nombre LIKE '".$search."%' OR descripcion_larga LIKE '".$search."%' OR id_producto LIKE '".$search."%' ";
        
    }//close if
            

    //Consulta para obtener los resultados      
    //$sql = "SELECT id_producto, nombre, descripcion_larga, descripcion_corta, descripcion, imagen, stock, imagen_logo, precio FROM productos INNER JOIN precios_productos ON productos.id_precio = precios_productos.id_precio INNER JOIN categorias ON productos.id_categoria = categorias.id_categoria {$where} ORDER BY {$order_by} {$limit}";
    //$sql = "CREATE TEMPORARY TABLE IF NOT EXISTS fec_val AS (SELECT pre.id_producto, max(pre.fecha_precio) fecha FROM precios_productos pre GROUP BY pre.id_producto); SELECT p.id_producto, p.nombre, p.descripcion_larga, p.descripcion_corta, cat.descripcion, p.imagen, p.stock, p.imagen_logo, pre.precio FROM fec_val fv INNER JOIN productos p ON fv.id_producto = p.id_producto INNER JOIN precios_productos pre ON pre.id_producto = p.id_producto INNER JOIN categorias cat ON cat.id_categoria = p.id_categoria {$where} ORDER BY {$order_by} {$limit}";   
    //$sql = "SELECT * FROM productos INNER JOIN categorias on productos.id_categoria = categorias.id_categoria INNER JOIN precios_productos ON precios_productos.id_producto = productos.id_producto";
    $sql = "CREATE TEMPORARY TABLE IF NOT EXISTS fec_val AS (SELECT pre.id_producto, max(pre.fecha_precio) fecha FROM precios_productos pre GROUP BY pre.id_producto); SELECT p.id_producto, p.nombre, p.descripcion_larga, p.descripcion_corta, cat.descripcion, p.imagen, p.stock, p.imagen_logo, pre.precio FROM fec_val fv INNER JOIN productos p ON fv.id_producto = p.id_producto INNER JOIN precios_productos pre ON pre.id_producto = p.id_producto INNER JOIN categorias cat ON cat.id_categoria = p.id_categoria WHERE pre.fecha_precio = fv.fecha"
    $stmt               =   $conn->prepare($sql);
    $stmt->execute();
    $results_array  =   $stmt->fetchAll(PDO::FETCH_ASSOC);


    //Obtengo el total de resultados
    $query_count    = "SELECT count(*) FROM productos";
    $nRows              =   $conn->query($query_count)->fetchColumn();

    //Devuelvo la informacion en formato json

    $pack                           = array();
    $pack["current"]            = $current;
    $pack["rowCount"]       = $rowCount;
    $pack["rows"]               = $results_array;
    $pack["total"]                  = $nRows;
    
    
    //Info de debug
    
    if($debug)
    {
        $pack['query']              = $sql;
        $pack['query_total']        = $query_count;     
    }
    
    echo json_encode($pack);
    }catch(PDOException $e) {

    echo 'SQL PDO ERROR: ' . $e->getMessage();}?>

どうすれば修正できるか知りたいです。ありがとう。

4

0 に答える 0