Я обучающийся программист, и у меня есть вопрос.
У меня есть таблица Html на моем веб-сайте, и я заполняю ее своими данными из MySql.
Теперь я хочу отсортировать свою таблицу по дате, поэтому я хочу, чтобы ближайшая дата была вверху таблицы.
Как мне это сделать (мой формат даты - [дд.мм] без лет)
При использовании метода ORDER BY 01.11 является, например, первой записью, а не после 23.10.
Мой код:
Надеюсь, вы могли бы мне помочь, потому что я не понимаю.
<!DOCTYPE html>
<html>
<head>
<title>lll</title>
<meta charset = "UTF-8">
<link rel = "stylesheet" href = "style.css">
<script type = "text/javascript">
function eintragen(){
window.location = "http://lll.bplaced.net/eintragen.php"
}
</script>
</head>
<body>
<p class = "headertext">Online lll</p>
<hr><br>
<?php
$servername = "localhost";
$username = "kllllf";
$password = "lll";
$dbname = "kll";
$conn = mysqli_connect($servername, $username, $password, $dbname);
if (mysqli_connect_errno()) {
die("Connection failed: " . mysqli_connect_error());
}
$rows = 0;
$sql = "
SELECT
*
FROM
lll
(ORDER BY
Ende)
";
$query = mysqli_query($conn, $sql);
$num = mysqli_num_rows($query);
echo "<table name=\"table\"border=\"1\">";
echo "<tr>";
echo "<td align=\"center\" valign=\"middle\" width=\"150px\" height=\"50px\">Bis Wann</td>";
echo "<td align=\"center\" valign=\"middle\" width=\"150px\">Fach</td>";
echo "<td align=\"center\" valign=\"middle\" width=\"350px\">lll</td>";
echo "</tr>";
echo "<tr>";
echo "<td align=\"center\" valign=\"middle\" height=\"50px\">× × ×</td>";
echo "<td align=\"center\" valign=\"middle\">× × ×</td>";
echo "<td align=\"center\" valign=\"middle\">× × ×</td>";
echo "</tr>";
while($row = mysqli_fetch_assoc($query)){
$fach = $row['Fach'];
$ha = $row['Hllln'];
$ende = $row['Ende'];
if ($ende < date("d.m")) {
$sqls = "DELETE FROM hlllll WHERE Ende='$ende';";
if (!mysqli_query($conn, $sqls)){
echo "<p>Es gab keine älteren Hlllll</p>";
}
}
echo "<tr>";
echo "<td align=\"center\" valign=\"middle\" height=\"50px\">".$ende."</td>";
echo "<td align=\"center\" valign=\"middle\">".$fach."</td>";
echo "<td align=\"center\" valign=\"middle\">".$ha."</td>";
echo "</tr>";
}
echo "</table>";
echo "<br />";
echo "<button type=\"button\" onclick=\"eintragen()\">Hlllllln eintragen?</button>";
?>
</body>
SELECT * FROM your_table ORDER BY STR_TO_DATE(your_date,'%d-%m-%Y') DESC используйте этот запрос
Почему бы не использовать DateField в своей базе данных и не преобразовать дату в правильный формат при ее отображении? Если вы используете строку, вам также необходимо вручную проверить, действительна ли дата, помимо проблемы сортировки.
@BilalAhmed Это не работает, например, 01.11 заказывается сверху, а 23.10 заказывается после 01.11
показать структуру вашей таблицы с образцами данных
+1 к oerl - но это не должно быть предложением. Структура вашей СУБД - неправильный, если вы храните дату в виде строки.






Преобразуйте столбец даты в дату и время и используйте запрос ниже.
$sql = " SELECT * FROM lll
ORDER BY convert(datetime, Ende , 104) ASC ";
Здесь 104 означает формат dd.mm
Способ 2:
$sql = "SELECT * FROM lll
ORDER BY STR_TO_DATE(Ende ,"%d.%m") ASC";
Это не помогает, 01.11 заказывается раньше 23.10
Какой тип данных у вашей даты? varchar или datetime?
Это варчар
Попробуйте мой обновленный ответ и дайте мне знать, какой результат он дает.
Поскольку у вас есть только день и месяц, вы можете попробовать это.
SELECT * FROM lll ORDER BY STR_TO_DATE(Ende,'%d.%m') DESC
Имейте в виду, что базе данных необходимо преобразовать каждую строку в столбце «Ende» для этого запроса. В зависимости от размера этой таблицы это может занять некоторое время. Если вы не используете основанный на функциях index.
Предложение
ORDER BYне должно заключаться в круглые скобки.