2011-06-23 4 views
0

私はプロジェクト管理システムに取り組んでおり、複数のMySQLテーブル(メッセージ、ToDo項目、イベントなど)を使用して、PHPを使用して構造化された形式にデータをプル&ソートする必要があります。複数のテーブルのソートされたデータを、日付順に並べ替えて表示するにはどうすればよいですか?

CREATE TABLE `todo` (
    `id` int(12) NOT NULL auto_increment, 
    `item` varchar(255) NOT NULL default '', 
    `description` text NOT NULL, 
    `created` int(12) NOT NULL default '0', 
    PRIMARY KEY (`id`) 
) ENGINE=MyISAM; 

INSERT INTO `todo` (`id`, `item`, `description`, `created`) VALUES 
(1, 'test to-do list 1', 'this is simply a test 1', 1308847222), 
(2, 'test to-do list 2', 'this is simply a test 2', 1308847318), 
(3, 'test to-do list 3', 'this is simply a test 3', 1308847371), 
(4, 'test to-do list 4', 'this is simply a test 4', 1306847441), 
(5, 'test to-do list 5', 'this is simply a test 5', 1306848208); 

CREATE TABLE `messages` (
    `id` int(12) NOT NULL auto_increment, 
    `title` varchar(255) NOT NULL default '', 
    `message` text NOT NULL, 
    `created` int(12) NOT NULL default '0', 
    PRIMARY KEY (`id`) 
) ENGINE=MyISAM; 

INSERT INTO `messages` (`id`, `title`, `message`, `created`) VALUES 
(1, 'test messages 1', 'this is simply a test 1', 1308847222), 
(2, 'test messages 2', 'this is simply a test 2', 1308847318), 
(3, 'test messages 3', 'this is simply a test 3', 1308847371), 
(4, 'test messages 4', 'this is simply a test 4', 1306847441), 
(5, 'test messages 5', 'this is simply a test 5', 1306848208); 

は何効率的にこれを処理するための最良の方法だろう。

形式は以下の通りです。この

<p><b>Today</b></p> 
<p> 
    Todo Item, Item name, Item Description <br /> 
    Todo Item, Item name, Item Description <br /> 
    Message, Message title    <br /> 
    Todo Item, Item name, Item Description <br /> 
    Todo Item, Item name, Item Description <br /> 
    Message, Message title    <br /> 
</p> 
<p><b>June 22, 2011</b></p> 
<p> 
    Todo Item, Item name, Item Description <br /> 
    Todo Item, Item name, Item Description <br /> 
    Todo Item, Item name, Item Description <br /> 
    Message, Message title    <br /> 
    Todo Item, Item name, Item Description <br /> 
    Message, Message title    <br /> 
</p> 

例MySQLテーブルのようになりますか?

+0

「藤堂項目」、テーブルからIDとは何ですか? – FinalForm

+0

2つのテーブルの関係は何ですか?メッセージがあなたの出力にあるtodoアイテムと混在するのはなぜですか? – Marvo

+0

@FinalForm最終的に、イベント、todolists、メッセージのような異なるタイプのものを区別するために色付けされるマーカーです。 –

答えて

1

すべてのアイテム取得するために、ユニオンクエリ:

SELECT DATE(created) AS d, item, description, 'todo' AS src 
FROM todo 

UNION 

SELECT DATE(created) AS d, title, message, 'messages' AS src 
FROM messages 

ORDER BY created 

その後、出力を処理するための単純な状態マシンは:

$prev_date = null; 
$first = true; 
while($row = mysql_fetch_assoc($query_results)) { 
    if ($prev_date <> $row['d') { 
     if (!$first) { 
      echo "</p>'; 
     } 
     echo "<p><b>{$row['d']</b></p><p>"; 
    } 
    echo " ... rows stuff<br />"; 
} 
+0

Marcに感謝します。そのメソッドはすばらしく動作するようです –

関連する問題