Как сортировать строки из таблицы MySQL, используя order by и order by desc, не усложняя процесс - PullRequest
1 голос
/ 27 марта 2019

Я нашел простое решение, позволяющее сортировать по каждому столбцу в моей html-таблице. Теперь я также хочу сделать возможным сортировку по каждому столбцу, кроме desc, но с моей идеей решения код выглядит сложным из-за двух ifs внутри if.

Я не могу придумать другое решение, которое могло бы выглядеть лучше и в целом было бы проще.

Это мой код прямо сейчас:

<th><a href="mypage.php?sort=type">Type:</a></th>
<th><a href="mypage.php?sort=desc">Description:</a></th>
<th><a href="mypage.php?sort=recorded">Recorded Date:</a></th>
<th><a href="mypage.php?sort=added">Added Date:</a></th>
<?php

$sql = "SELECT * FROM MyTable";

if ($_GET['sort'] == 'type')
{
    $sql .= " ORDER BY type";
}
elseif ($_GET['sort'] == 'desc')
{
    $sql .= " ORDER BY Description";
}
elseif ($_GET['sort'] == 'recorded')
{
    $sql .= " ORDER BY DateRecorded";
}
elseif($_GET['sort'] == 'added')
{
    $sql .= " ORDER BY DateAdded";
}

$>

И моей первой идеей было что-то вроде:

$sql = "SELECT * FROM MyTable";

$checkSort = false;
if ($_GET['sort'] == 'type')
{
    if ($checkSort == false)
    {
        $sql .= " ORDER BY type";
        $checkSort = true; 
    }
    if ($checkSort == true)
    {
        $sql .= " ORDER BY type desc";
        $checkSort = false; 
    }
}

Я думаю, что это не выглядит чисто, потому что мне нужно было бы сделать это для каждого столбца, и моя таблица должна стать больше столбцов в будущем.

Ответы [ 3 ]

1 голос
/ 27 марта 2019

Я бы использовал это: ( DOC )

$sql = "SELECT * FROM MyTable";

switch($_GET['sort']):
    case 'type':
        $sql .= " ORDER BY type";
        break;
    case 'desc':
        $sql .= " ORDER BY Description";
        break;
    case 'recorded':
        $sql .= " ORDER BY DateRecorded";
        break;
    case 'added':
        $sql .= " ORDER BY DateAdded";
        break;
endswitch;

И вы можете добавить столько «кейсов», сколько захотите!

1 голос
/ 27 марта 2019

Вы можете попробовать напрямую отправить значение в вашем вызове.

<th><a href="mypage.php?sort=type&sortType=ASC/DESC">Type:</a></th>
<th><a href="mypage.php?sort=description&sortType=ASC/DESC">Description:</a></th>
<th><a href="mypage.php?sort=daterecorded&sortType=ASC/DESC">Recorded Date:</a></th>
<th><a href="mypage.php?sort=dateadded&sortType=ASC/DESC">Added Date:</a></th>

<?php
$sql = "SELECT * FROM MyTable ORDER BY ".$_GET['sort']." ".$_GET['sortType'];
?>

Очевидно, что вам придется проверять работоспособность, когда вы непосредственно передаете вызов в БД.

Примечание - "& sortType = ASC / DESC", только один из ASC или DESC для отправки

0 голосов
/ 27 марта 2019

Вы можете использовать datatable для решения вашей проблемы. Пожалуйста, проверьте ниже код

HTML-код файла

<!-- Need to add this CSS and JS in your HTML page -->
<link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/1.10.19/css/jquery.dataTables.min.css">
<script type="text/javascript" language="javascript" src="https://code.jquery.com/jquery-3.3.1.js"></script>
<script type="text/javascript" language="javascript" src="https://cdn.datatables.net/1.10.19/js/jquery.dataTables.min.js"></script>


<script type="text/javascript">
    //This code used to initialise the table shown
    $(document).ready(function() {
        $('#example').DataTable( {
            "processing": true,
            "serverSide": true,
            "ajax": "server_processing.php"
        } );
    } );
</script>

<table id="example" class="display" style="width:100%">
    <thead>
        <tr>
            <th>Type:</th>
            <th>Description:</th>
            <th>Recorded Date:</th>
            <th>Added Date:</th>
        </tr>
    </thead>
</table>

Или Вы можете проверить этот блог

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...