مرتب سازی (MySQL Order By)
در «مرتب سازی (Order By)» نتیجه ها را بالا به پایین می چینیم. «صعودی (ASC)» یعنی از کوچک به بزرگ. «نزولی (DESC)» یعنی برعکس. مثل مرتب کردن نمره های مدرسه.
الگوی ساده ORDER BY
اول الگو را ببین. سپس با PHP اجرا کن.
SELECT column_name(s)
FROM table_name
ORDER BY column_name(s) ASC;
MySQLi شی گرا + ORDER BY
اینجا بر اساس lastname مرتب می کنیم. سپس چاپ می کنیم.
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$sql = "SELECT id, firstname, lastname FROM MyGuests ORDER BY lastname";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
while ($row = $result->fetch_assoc()) {
echo "id: " . $row["id"] . " - Name: " . $row["firstname"] . " " . $row["lastname"] . "<br>";
}
} else {
echo "0 results";
}
$conn->close();
?>
MySQLi رویه ای + ORDER BY
همان کار با سبک رویه ای انجام می شود.
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";
$conn = mysqli_connect($servername, $username, $password, $dbname);
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
$sql = "SELECT id, firstname, lastname FROM MyGuests ORDER BY lastname";
$result = mysqli_query($conn, $sql);
if (mysqli_num_rows($result) > 0) {
while ($row = mysqli_fetch_assoc($result)) {
echo "id: " . $row["id"] . " - Name: " . $row["firstname"] . " " . $row["lastname"] . "<br>";
}
} else {
echo "0 results";
}
mysqli_close($conn);
?>
خروجی جدول HTML (MySQLi)
می توانیم خروجی را در جدول HTML نمایش دهیم.
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$sql = "SELECT id, firstname, lastname FROM MyGuests ORDER BY lastname";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
echo "<table><tr><th>ID</th><th>Name</th></tr>";
while ($row = $result->fetch_assoc()) {
echo "<tr><td>" . $row["id"] . "</td><td>" . $row["firstname"] . " " . $row["lastname"] . "</td></tr>";
}
echo "</table>";
} else {
echo "0 results";
}
$conn->close();
?>
PDO + Prepared (با ORDER BY)
در PDO کوئری را آماده می کنیم. سپس مرتب و چاپ می کنیم.
<?php
echo "<table style='border: solid 1px black;'>";
echo "<tr><th>Id</th><th>Firstname</th><th>Lastname</th></tr>";
class TableRows extends RecursiveIteratorIterator {
function __construct($it) {
parent::__construct($it, self::LEAVES_ONLY);
}
function current() {
return "<td style='width:150px;border:1px solid black;'>" . parent::current() . "</td>";
}
function beginChildren() {
echo "<tr>";
}
function endChildren() {
echo "</tr>\n";
}
}
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDBPDO";
try {
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $conn->prepare("SELECT id, firstname, lastname FROM MyGuests ORDER BY lastname");
$stmt->execute();
$result = $stmt->setFetchMode(PDO::FETCH_ASSOC);
foreach (new TableRows(new RecursiveArrayIterator($stmt->fetchAll())) as $k => $v) {
echo $v;
}
} catch (PDOException $e) {
echo "Error: " . $e->getMessage();
}
$conn = null;
echo "</table>";
?>
گام های عملی
- اتصال بساز و خطا را چک کن.
- SELECT با ORDER BY بنویس و اجرا کن.
- نتیجه را پیمایش و چاپ کن.
نکته: برای نزولی از واژه DESC استفاده کن. برای صعودی ASC بگذار.
منابع و ادامه مسیر
- انتخاب داده (MySQL Select Data) مرور SELECT.
- شرط WHERE فیلتر قبل از مرتب سازی.
- حذف رکوردها (MySQL Delete) مرحله بعدی کار.
جمع بندی سریع
- ORDER BY نتیجه را مرتب می کند.
- ASC صعودی است؛ DESC نزولی است.
- می توان خروجی را جدول کرد.
- PDO و MySQLi هر دو پشتیبانی می کنند.