#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>
Или вы можете проверить этот блог