PHP MySQL ORDER BY句
1. MySQLデータベースのデータを取得し並び替える
SQLの ORDER BY 句は、取得した結果セットを昇順または降順でソートするために使用されます。
ORDER BY 句は、デフォルトでレコードを昇順(ASC)にソートします。降順にソートしたい場合は、DESC キーワードを使用します。
SELECT column_name(s) FROM table_name ORDER BY column_name(s) ASC|DESC2. MySQLiを使用したデータの取得とソート
以下の例では、MyGuests テーブルから id、firstname、lastname カラムを選択します。レコードは lastname カラムに基づいてソートされます。
2.1 MySQLi オブジェクト指向での実装例
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";
// 接続の作成
$conn = new mysqli($servername, $username, $password, $dbname);
// 接続の確認
if ($conn->connect_error) {
die("接続に失敗しました: " . $conn->connect_error);
}
// lastnameでソートして取得するSQL
$sql = "SELECT id, firstname, lastname FROM MyGuests ORDER BY lastname";
// SQLクエリの実行
$result = $conn->query($sql);
// 結果セットの処理
if ($result->num_rows > 0) {
// 各行のデータを出力
while($row = $result->fetch_assoc()) {
echo "id: " . $row["id"]. " - 名前: " . $row["firstname"]. " " . $row["lastname"]. "<br>";
}
} else {
echo "結果は0件です";
}
$conn->close();
?>2.2 コードの解説
- まず、MyGuests テーブルから
id、firstname、lastnameカラムを選択し、lastnameカラムでソートするSQLクエリを作成します。 - 次の行の
$conn->query($sql)でクエリを実行し、結果のデータを$resultという変数に格納します。 $result->num_rows > 0で、返されたレコードが1件以上あるかを確認します。- レコードが存在する場合、
fetch_assoc()関数が結果セットを連想配列に格納し、while()ループで各カラムのデータを出力します。
2.3 MySQLi 手続き型での実装例
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";
// 接続の作成
$conn = mysqli_connect($servername, $username, $password, $dbname);
// 接続の確認
if (!$conn) {
die("接続に失敗しました: " . 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"]. " - 名前: " . $row["firstname"]. " " . $row["lastname"]. "<br>";
}
} else {
echo "結果は0件です";
}
mysqli_close($conn);
?>3. 結果をHTMLテーブルに出力する
ソートされた結果をブラウザ上で見やすく表示するために、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);
}
$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>名前</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件です";
}
$conn->close();
?>4. PDOを使用したデータの取得とソート
PDO(PHP Data Objects)を使用してデータを取得し、lastname でソートした上でHTMLテーブルに表示する例です。
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";
try {
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
// PDOのエラーモードを例外に設定
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $e){
die("接続できませんでした。 " . $e->getMessage());
}
try {
$sql = "SELECT id, firstname, lastname FROM MyGuests ORDER BY lastname";
// SQLクエリの実行
$result = $conn->query($sql);
// 結果セットの処理
if ($result->rowCount() > 0) {
echo "<table><tr><th>ID</th><th>名</th><th>姓</th></tr>";
// 各行のデータを出力
while($row = $result->fetch()) {
echo "<tr>";
echo "<td>" . $row['id'] . "</td>";
echo "<td>" . $row['firstname'] . "</td>";
echo "<td>" . $row['lastname'] . "</td>";
echo "</tr>";
}
echo "</table>";
unset($result);
} else {
echo "レコードが見つかりませんでした。";
}
} catch(PDOException $e) {
echo "エラー: " . $e->getMessage();
}
$conn = null;
?>