-1

有 3 个不同的 mysql 表,我的脚本使用 JOINS 查询数据库以输出 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
4

1 回答 1

0

如果我没看错(我不确定)你的

date_last_edited ...无论值来自哪个表,都按排序...

那么你可能想要使用UNION而不是JOIN

SELECT account_name item, accounts_date_last_edited date
  FROM accounts
UNION ALL
SELECT case_subject, cases_date_last_edited
  FROM cases
UNION ALL
SELECT task_title, tasks_date_last_edited
  FROM tasks
 ORDER BY date DESC

这是SQLFiddle演示

于 2013-11-04T03:07:09.853 回答