PHP – ترتیبدهی دادهها از پایگاه داده با دستور ORDER BY در MySQL
دستور ORDER BY
برای مرتبسازی نتایج در پایگاه داده MySQL به کار میرود. این دستور بهطور پیشفرض رکوردها را بهصورت صعودی (ASC
) مرتب میکند، اما میتوان با استفاده از کلمه کلیدی DESC
، رکوردها را بهصورت نزولی مرتب کرد.
انتخاب و ترتیبدهی دادهها با MySQLi
MySQLi به صورت شیءگرا
مثال (MySQLi Object-oriented)
در این مثال، رکوردها از جدول “MyGuests” با استفاده از دستور ORDER BY
بر اساس ستون lastname
به ترتیب صعودی (پیشفرض) نمایش داده میشود:
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";
// ایجاد اتصال
$conn = new mysqli($servername, $username, $password, $dbname);
// بررسی اتصال
if ($conn->connect_error) {
die("اتصال ناموفق: " . $conn->connect_error);
}
// آمادهسازی و اجرای کوئری با دستور ORDER BY
$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 "نتیجهای یافت نشد";
}
$conn->close();
?>
توضیحات:
ORDER BY lastname
: رکوردها بر اساس ستونlastname
مرتب میشوند.fetch_assoc()
: نتایج را به صورت آرایههای وابسته (associative arrays) برمیگرداند.
MySQLi به صورت رویهای
مثال (MySQLi Procedural)
این مثال مشابه مثال شیءگرا است، اما به صورت رویهای نوشته شده است:
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";
// ایجاد اتصال
$conn = mysqli_connect($servername, $username, $password, $dbname);
// بررسی اتصال
if (!$conn) {
die("اتصال ناموفق: " . mysqli_connect_error());
}
// آمادهسازی و اجرای کوئری با دستور ORDER BY
$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 "نتیجهای یافت نشد";
}
mysqli_close($conn);
?>
نمایش نتایج در جدول HTML
مثال (MySQLi Object-oriented)
برای نمایش دادهها در یک جدول HTML به ترتیب، از کد زیر استفاده کنید:
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";
// ایجاد اتصال
$conn = new mysqli($servername, $username, $password, $dbname);
// بررسی اتصال
if ($conn->connect_error) {
die("اتصال ناموفق: " . $conn->connect_error);
}
// آمادهسازی و اجرای کوئری با دستور ORDER BY
$sql = "SELECT id, firstname, lastname FROM MyGuests ORDER BY lastname";
$result = $conn->query($sql);
// بررسی و نمایش نتایج در جدول HTML
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 "نتیجهای یافت نشد";
}
$conn->close();
?>
—
انتخاب دادهها با PDO و استفاده از Prepared Statements
مثال (PDO)
در این مثال، از Prepared Statements برای انتخاب دادهها و نمایش آنها در یک جدول HTML استفاده میشود:
<?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);
// آمادهسازی و اجرای کوئری با دستور ORDER BY
$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 "خطا: " . $e->getMessage();
}
$conn = null;
echo "</table>";
?>
توضیحات:
prepare()
: برای آمادهسازی کوئری SQL با استفاده از دستورORDER BY
.execute()
: برای اجرای کوئری.fetchAll()
: دریافت همه نتایج به صورت آرایه.
جمعبندی
در این بخش، یاد گرفتید که چگونه با استفاده از دستور ORDER BY
رکوردهای پایگاه داده را بر اساس یک یا چند ستون به ترتیب دلخواه مرتب کنید. این قابلیت میتواند به شما کمک کند تا دادهها را به شکلهای مختلفی برای نمایش و تحلیل آماده کنید. انتخاب روش مناسب برای اتصال به پایگاه داده بستگی به نیاز پروژه و ترجیحات شما دارد، اما PDO به دلیل امکانات پیشرفته و قابلیت استفاده با انواع پایگاه دادهها معمولاً توصیه میشود.
برای ارسال نظر لطفا ابتدا وارد حساب کاربری خود شوید. صفحه ورود و ثبت نام