php - 使我的表格可按四列排序

标签 php postgresql sorting

我有一个用户日志表,可以正常工作并按时间戳排序,但我还需要它可以按 IP 地址和用户排序,但无法正常工作。我希望用户能够选择一个列进行 ORDER BY,整个表将按该列求助。我找到了一个使用库的解决方案,但我不能那样做,我需要一些简单且独立的东西。请协助。

<table border="1" cellspacing="0" cellpadding="0">
<tr bgcolor="#D4E9FC">
<td> 
Timestamp 
<a href="?OrderBy=user_log.stamp&SortBy=DESC">&#9660;</a>
<a href="?OrderBy=user_log.stamp&SortBy=ASC">&#9650;</a> 
</td> 
<td> 
User
<a href="?OrderBy=user_staff.user_name&SortBy=DESC">&#9660;</a>
<a href="?OrderBy=user_staff.user_name&SortBy=ASC">&#9650;</a>
</td>
<td> 
IP Address
<a href="?OrderBy=user_log.userip&SortBy=DESC">&#9660;</a> 
<a href="?OrderBy=user_log.userip&SortBy=ASC">&#9650;</a>
</td> 
<td> 
Transfer
<a href="?OrderBy=user_log.transfer_id&SortBy=DESC">&#9660;</a> 
<a href="?OrderBy=user_log.transfer_id&SortBy=ASC">&#9650;</a>
</td> 
<td> 
Action
</td> 
</tr>

    $orderBy = array('user_log.stamp&SortBy=DESC', 'user_staff.user_name&SortBy=DESC', 'user_log.userip&SortBy=DESC', 'user_log.transfer_id&SortBy=DESC');

    $order = 'user_log.stamp';
if (isset($_GET['orderBy']) && in_array($_GET['orderBy'], $orderBy)) {
$order = $_GET['orderBy']  . ' ' . $_GET['SortBy'];
}

 $query = "SELECT user_log.stamp, user_staff.user_name, user_log.userip, user_log.transfer_id, user_log.action
    FROM user_log
    INNER JOIN user_staff
    ON user_staff.user_id=user_log.user_id 
    ORDER BY $order
    LIMIT 200";

    $result = pg_query($query); 
    if (!$result) { 
        echo "Problem with query " . $query . "<br/>"; 
        echo pg_last_error(); 
        exit(); 
    } 

    while($myrow = pg_fetch_assoc($result)) { 
        printf ("<tr><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td></tr>", $myrow['stamp'], htmlspecialchars($myrow['user_name']), htmlspecialchars($myrow['userip']), htmlspecialchars($myrow['transfer_id']), htmlspecialchars($myrow['action']));
    } 
    ?>
    </table><br>

最佳答案

你可以这样制作表格:

<table border="1" cellspacing="0" cellpadding="0">
<tr bgcolor="#D4E9FC">
    <td> 
    Timestamp 
    <a href="?OrderBy=user_log.stamp&SortBy=DESC">&darr;</a> 
    <a href="?OrderBy=user_log.stamp&SortBy=ASC">&uarr;</a>
    </td> 
    <td> 
    User
    <a href="?OrderBy=user_staff.user_name&SortBy=DESC">&darr;</a> 
    <a href="?OrderBy=user_staff.user_name&SortBy=ASC">&uarr;</a>
    </td>
    <td> 
    IP Address
    <a href="?OrderBy=user_log.userip&SortBy=DESC">&darr;</a> 
    <a href="?OrderBy=user_log.userip&SortBy=ASC">&uarr;</a>
    </td> 
    <td> 
    Transfer
    </td> 
    <td> 
    Action
    </td> 
</tr>
<table>

然后我 php 你可以找到 GET 参数:

$orderBy = 'user_log.stamp';

if ($_SERVER['REQUEST_METHOD'] === 'GET') {
    $orderBy = isset($_GET['OrderBy']) ? $_GET['OrderBy'] : 'user_log.stamp';
    $orderBy = isset($_GET['SortBy']) ? $_GET['SortBy'] : 'DESC';

}
     $query = "SELECT user_log.stamp, user_staff.user_name, user_log.userip, user_log.transfer_id, user_log.action
            FROM user_log
            INNER JOIN user_staff
            ON user_staff.user_id=user_log.user_id 
            ORDER BY $orderBy 
            DESC LIMIT 200";

我正在使用您的逻辑 - 但您所做的根本不是保存......最好使用 PDO 语句!

关于php - 使我的表格可按四列排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41908068/

相关文章:

python按时间顺序排序OrderedDict键

algorithm - 后续加权

PHP foreach 与 jQuery 的问题

javascript - Node.js 不连接 MySQL, PHPMyAdmin

postgresql - 当我尝试在 Cedar Stack 上将我的 SQLite3 推送到 Postgresql(通过 Taps)时,为什么会出现此错误?

postgresql - 如何使用postgresql角色连接数据库?

php - 一种在 SQL 查询中匹配所选输入字段的 id 的方法?

php - Cron Job - 用主文件递归替换文件实例(timthumb 漏洞利用预防)

linux - 用户 Centos 8 Postgresql12 的身份验证失败

linux - 如何按列排序并随机打破关系