-1

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
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 に答える