PHP / MYSQL:如何订购单击链接的项目列表

时间:2013-11-24 18:31:25

标签: php mysql switch-statement

我正在做一个从sql数据库中获取产品列表的练习(不使用对象)。 我做对了,但是现在我想添加在asc或desc orden中根据用户点击我在每个表格标题旁边的微小向上和向下箭头中订购结果的可能性。

这是我的原始代码:

<?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>

现在,为了做到这一点,我考虑使用开关语句,但这没用(我想我应该使用$ _GET或$ _POST,但不知道如何在这里使用它,我也不应该再次复制整个查询...)我尝试了这个改变,没有运气:

<?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;      
}

请注意,我已阅读this solution建议使用 isset(),但不知道如何在此处复制它。我也认为使用开关可能更容易......

1 个答案:

答案 0 :(得分: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的末尾需要额外的空间,或者我们需要每次都把它放在那里。

现在,如果我们想要添加order by,我们可以将它添加到该字符串的末尾。所以:

$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";