2013-11-24 18 views
0

我正在做一個練習,從sql數據庫獲取產品列表(不使用對象)。 我已經明白了,但現在我想添加按照用戶在每個表格標題旁放置的小小的向上和向下箭頭點擊asc或desc orden的結果。PHP/MYSQL:如何訂購項目列表,點擊鏈接

這是我的原代碼:現在

<?php 
@$link=mysqli_connect('127.0.0.1','root','','phpdb') 
OR die('No se pudo conectar a la base'); 
$sql='SELECT p.cod_producto, 
     p.nombre, 
     p.precio, 
     p.stock, 
     p.cod_categoria, 
     c.descripcion, 
     p.cod_marca, 
     m.nombre_marca 
FROM productos p JOIN categorias c, marcas m 
WHERE p.cod_categoria=c.cod_categoria 
AND  p.cod_marca=m.cod_marca'; 

@$rs=mysqli_query($link,$sql) 
OR die('No se puede ejecutar la consulta a la base'); 
?> 

<table border='1'> 
    <tr> 
     <th>Cod. Producto</th> 
     <th>Nombre</th> 
     <th>Precio</th> 
     <th>Stock</th> 
     <th>Cod. Categoría</th> 
     <th>Descripción</th> 
     <th>Cod. Marca</th> 
     <th>Nombre Marca</th> 
    </tr> 
<?php 
$linea=1; 

while($v=mysqli_fetch_assoc($rs)){ 
    if($linea%2==1) $color='#ccccff'; 
    else $color='#ffffff'; 
?> 
    <tr> 
     <td bgcolor="<?php echo $color; ?>"><?php echo $v['cod_producto']; ?></td> 
     <td bgcolor="<?php echo $color; ?>"><?php echo $v['nombre']; ?></td> 
     <td bgcolor="<?php echo $color; ?>"><?php echo $v['precio']; ?></td> 
     <td bgcolor="<?php echo $color; ?>"><?php echo $v['stock']; ?></td> 
     <td bgcolor="<?php echo $color; ?>"><?php echo $v['cod_categoria']; ?></td> 
     <td bgcolor="<?php echo $color; ?>"><?php echo $v['descripcion']; ?></td> 
     <td bgcolor="<?php echo $color; ?>"><?php echo $v['cod_marca']; ?></td> 
     <td bgcolor="<?php echo $color; ?>"><?php echo $v['nombre_marca']; ?></td> 
    </tr> 
<?php 
    $linea++; 
    } 
?> 
    <tr> 
     <td colspan='<?php echo mysqli_num_fields($rs);?>' align="center"> 
     Registros: <?php echo mysqli_num_rows($rs);?></td> 
    </tr> 
    <?php 
     mysqli_close($link); 
    ?> 
</table> 

,爲了做到這一點,我想利用開關語句,但這didn't工作(我想我應該用$ _GET或$彥博,但鴕鳥政策知道如何在這裏使用它,我也說我shouldn't再次複製整個查詢......事)我想這個變化,沒有運氣:

<?php 
@$link=mysqli_connect('127.0.0.1','root','','phpdb') 
OR die('No se pudo conectar a la base'); 

$sql='SELECT p.cod_producto, 
     p.nombre, 
     p.precio, 
     p.stock, 
     p.cod_categoria, 
     c.descripcion, 
     p.cod_marca, 
     m.nombre_marca 
FROM productos p JOIN categorias c, marcas m 
WHERE p.cod_categoria=c.cod_categoria 
AND  p.cod_marca=m.cod_marca'; 

switch ($sql) { 
    case 'codProdUp': 
     'SELECT p.cod_producto, 
     p.nombre, 
     p.precio, 
     p.stock, 
     p.cod_categoria, 
     c.descripcion, 
     p.cod_marca, 
     m.nombre_marca 
     FROM productos p JOIN categorias c, marcas m 
     WHERE p.cod_categoria=c.cod_categoria 
     AND  p.cod_marca=m.cod_marca 
     ORDER BY p.cod_producto ASC '; 
     break; 
    case 'codProdDown': 
     'SELECT p.cod_producto, 
     p.nombre, 
     p.precio, 
     p.stock, 
     p.cod_categoria, 
     c.descripcion, 
     p.cod_marca, 
     m.nombre_marca 
     FROM productos p JOIN categorias c, marcas m 
     WHERE p.cod_categoria=c.cod_categoria 
     AND  p.cod_marca=m.cod_marca 
     ORDER BY p.cod_producto DESC '; 
     break;  
} 

請注意,I'已閱讀this solution,建議使用isset(),但不知道如何在這裏複製它。我也認爲,使用開關可能會更容易...

+0

所以,這是相同的resut每次只oredered不同的設定?您應該在應用程序級別處理該邏輯 - 有點Ajax可以爲您做到這一點。 – Strawberry

+0

使用ajax和php –

回答

2

現在,這是你的基本查詢

$sql='SELECT p.cod_producto, 
    p.nombre, 
    p.precio, 
    p.stock, 
    p.cod_categoria, 
    c.descripcion, 
    p.cod_marca, 
    m.nombre_marca 
FROM productos p JOIN categorias c, marcas m 
WHERE p.cod_categoria=c.cod_categoria 
AND  p.cod_marca=m.cod_marca '; 

我們需要額外的空間,在$ SQL年底或我們需要把它放在那裏每次。

現在,如果我們想要添加順序,我們可以將它添加到該字符串的末尾。所以:

$sql .= 'ORDER BY p.cod_producto ASC'; 

現在我們已經通過的條件是這樣的多個訂單可能會奏效

switch($_GET['sort']){ 
    case "codProdUp": 
     $sql .= 'ORDER BY p.cod_producto ASC'; 
     break; 
    case "codProdDown": 
     $sql .= 'ORDER BY p.cod_producto DESC'; 
     break; 
} 

現在你$ sql中會在其結尾包含基地+有條件秩序。

現在,如果您查詢www.example.com/site.php?sort=codProdUp或www.example.com/site.php?sort=codProdDown,表格將按不同順序排序。

$sql .= "ORDER BY"; 

是一回事

$sql = $sql . "ORDER BY";