3 つの異なる mysql テーブルがあり、スクリプトは JOINS を使用して DB にクエリを実行し、3 つのテーブルのそれぞれから最新の結果を出力します。すべてが想定どおりに機能しますが、mysql データベースが JOINS を許可する方法では、ORDER BY はテーブルをリストするときに結果を並べ替えます。その結果、結果は 3 つの異なる MYSQL テーブルからのものであるため、最終的な出力は日付順に正しく並べられません。 .
代わりに、結果は日付順に正しく並べられ、同じテーブルの他の結果の隣にのみ表示されます。以下のスクリプトと結果を参照してください: (簡単にするために、出力の制限を 1 にしています)
$username = $_SESSION['username'];
$result = $mysqli->query("
SELECT
accounts.account_name,
cases.case_subject,
tasks.task_title,
accounts.accounts_date_last_edited,
cases.cases_date_last_edited,
tasks.tasks_date_last_edited
FROM
accounts,
cases,
tasks
WHERE
accounts.username = cases.username
AND cases.username = tasks.username
ORDER BY
accounts.accounts_date_last_edited DESC,
cases.cases_date_last_edited DESC,
tasks.tasks_date_last_edited DESC
LIMIT 1
");
if (!$result) { echo "Error Result5: " . $mysqli->error; } else {
echo "<table>";
echo "<tr><th>Item</th><th>Date</th></tr>";
while ($row = $result->fetch_array(MYSQLI_ASSOC))
{
echo "<tr>";
echo "<td>" . $row['account_name'] . "</td><br>";
echo "<td>" . $row['accounts_date_last_edited'] . "</td><br>";
echo "</tr>";
echo "<tr>";
echo "<td>" . $row['case_subject'] . "</td><br>";
echo "<td>" . $row['cases_date_last_edited'] . "</td><br>";
echo "</tr>";
echo "<tr>";
echo "<td>" . $row['task_title'] . "</td><br>";
echo "<td>" . $row['tasks_date_last_edited'] . "</td><br>";
echo "</tr>";
}
echo "</table>";
結果は以下のとおりです。上記の各表から 1 つの項目がリストされます。繰り返しますが、値がどのテーブルからのものかに関係なく、date_last_edited で並べ替えようとしています。
Item Date
Shorley Homes 2013-11-02 04:02:34
Techical Testing Case Open 2013-11-03 07:17:36
Icons 2013-11-03 07:28:02