2011-05-12 11 views
0

「ニュースフィード」にメンバーのアクティビティを表示するために、2つのテーブルを同時に照会しようとしています。データベースから一度に2つのテーブルをクエリしていますか?

だから、私は私の2つのクエリを持っているが、私はそれらを結合したいと思います:

$status_query = mysql_query("SELECT * FROM member_status_updates WHERE member_id = '1'"): 
    and 
$topic_query = mysql_query("SELECT * FROM topics WHERE author_id = '1'"); 

私は、彼らが挿入された時間順にそれらを表示することができますので、私はこれらの2つのクエリを組み合わせることができますどのように?ステータスが5秒前に転記され、トピックが昨日投稿された場​​合は、ステータス更新が一番上に表示されます。これを行うために、私は2つのクエリを組み合わせる必要があると考えました。

しかし、私がID DESCでそれらを並べ替えると、表示が乱れるでしょうか?たとえば、1秒前に転記されたステータス更新がIDが50で、昨日投稿されたトピックのIDが100だった場合、ステータス更新のIDがステータス更新のIDよりも大きいため、トピックが最初に表示されます1秒前に投稿されましたか?もしそうなら、私はどのように日付までに並べ替えることができるのだろうと思っていた、私は各レコードのタイムスタンプを持っています。

ご協力いただきまして誠にありがとうございます。

+0

? – Thomas

+1

topics.author_idはmemberstatus_status_updates.member_idと同じことを表しますか? – Thomas

+0

更新のために 'status_content'のために返されるべきcolumns、およびトピックのための 'title'。また、 - 同じユーザーID(2番目のコメント@)が表示されます。 – Dan

答えて

2

一つの解決策は、連合にすべてのクエリを使用することです:

Select 'member' As Source, <some timestamp col> As InsertedDate, ... 
From member_status_updates 
Where member_id = 1 
Union All 
Select 'topics', <some timestamp col>, ... 
From topics 
Where author_id = '1' 
Order By InsertedDate Desc 

キャッチが2つのクエリの列の列数とデータ型が同一でなければならないということです。 (Select *を避ける別の理由)。


あなたは常にtopicsテーブルから行を取得し、member_status_updates.member_idにそのtopics.author_idマップを与えられたでしょう、あなたが参加左を使用することができます知っていた場合。あなたはまた、いくつかのタイムスタンプ値に基づいて、最後の行をしたい場合は、あなたのような何かができる:何の列が返されるべきであるとテーブルのそれぞれにどのような列には、あなたが時間のために挿入されたフィルタにしたい時間を表し

Select T.title, M.status_content 
From topics As T 
    Left Join member_status_updates As M 
     On M.member_id = T.author_id 
      And M.SomeTimestampCol = (
             Select Max(M1.SomeTimestampCol) 
             From member_status_updates As M1 
             Where M1.member_id = 1 
             ) 
Where T.author_id = 1 
    And T.SomeTimestampCol = (
           Select Max(T1.SomeTimestampCol) 
           From topics As T1 
           Where T1.author_id = 1 
           ) 
+0

書かれているように、この解決法では@Danの注文要件は考慮されていません。 – garnertb

+0

@ user589983 - 既に修正されています。 – Thomas

+0

ありがとう、私は実行するクエリを持っています。しかし、実際に結果を表示する方法は混乱しています。 while()を使用していますが、データベースからの情報には表示されません。クエリを実行すると、配列全体が次のようになります。Array([0] => status_member_id [Source] => status_member_id [1] => status_date [InsertedDate] => status_date) – Dan

関連する問題