Как отсортировать строки из таблицы mysql с помощью order by и order by desc, не усложняя это

#php #html #mysql #sorting

#php #HTML #mysql #сортировка

Вопрос:

Я нашел простое решение, позволяющее выполнять сортировку по каждому столбцу в моей 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; 
    }
}
  

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

Комментарии:

1. итак, вы хотите оптимизировать код? правильно

2. @devpro ну да, я все еще новичок и не могу придумать другого лучшего решения, и я подумал, может быть, кто-нибудь знает, что я должен сделать вместо этого

3. @Xxy : другое решение — использовать базу данных

4. @PraveenKumar Я никогда раньше не пользовался базой данных, поэтому сначала мне нужно ознакомиться с ней, как ее включить и использовать. Но я также хочу изучить это для себя.

5. вы также хотите отсортировать по порядку DESC?

Ответ №1:

Я бы использовал это: (ДОКУМЕНТ)

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

И вы можете добавить столько ‘case’, сколько захотите!

Ответ №2:

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

 <th><a href="mypage.php?sort=typeamp;sortType=ASC/DESC">Type:</a></th>
<th><a href="mypage.php?sort=descriptionamp;sortType=ASC/DESC">Description:</a></th>
<th><a href="mypage.php?sort=daterecordedamp;sortType=ASC/DESC">Recorded Date:</a></th>
<th><a href="mypage.php?sort=dateaddedamp;sortType=ASC/DESC">Added Date:</a></th>

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

Очевидно, вам придется выполнить проверку работоспособности, поскольку вы напрямую передаете вызов в DB.

Примечание — «amp;sortType=ASC / DESC», для отправки требуется только один из ASC или DESC

Комментарии:

1. как насчет DESC??

2. Вы хотите выполнить вызов по убыванию?

3. как упоминалось в вопросе OP, order by и order by desc . я думаю, здесь просто упорядочить с помощью ASC

4. Отредактировал ответ для обоих

5. редактирование приведет к синтаксической ошибке, пожалуйста, запустите на своем компьютере

Ответ №3:

Вы можете использовать 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>
  

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