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();}?>
どうすれば修正できるか知りたいです。ありがとう。