2017-04-25 9 views
0

私は2つのテーブルmysqlの参加を選択:1対多の関係

table: wiki_articles 

wiki_article_id | title  | slug 
--------------------------------------- 
1    | title 1 | title-1 
2    | title 2 | title-2 

table: wiki_articles_text 

wiki_article_text_id | wiki_article_id | text | timestamp 
--------------------------------------------------------- 
1     | 1    | ... | 2017-04-25 12:00:00 
2     | 1    | ... | 2017-04-25 12:30:00 
3     | 2    | ... | 2017-04-25 13:00:00 
4     | 2    | ... | 2017-04-25 13:30:00 

を持っている私は、各記事の最新のテキストと一緒にすべての記事を選択します。これまで

私のクエリは:

 $q = " SELECT  a.wiki_article_id, 
          a.title, 
          a.slug, 
          t1.text, 
          t1.timestamp 
       FROM 
          wiki_articles AS a 
       JOIN 
          wiki_articles_texts AS t1 
         ON 
          a.wiki_article_id = t1.wiki_article_id 
       LEFT OUTER JOIN 
          wiki_articles_texts AS t2 
         ON 
          (a.wiki_article_id = t2.wiki_article_id AND (t1.timestamp < t2.timestamp OR t1.timestamp = t2.timestamp AND t1.wiki_article_text_id < t2.wiki_article_text_id)) 
       WHERE 
          t2.wiki_article_text_id IS NULL"; 

これは動作しません。私はこれを同じ問題だと思うので、この(SQL join: selecting the last records in a one-to-many relationship)の質問を試してみました。

私のクエリで何が問題になっていますか?

編集:私はバグを見つけました。今すぐ動作します。私は追加するのを忘れ「1」あなたは、内側がwiki_article_idで最大my_timestampグループに参加使用することができます

答えて

0

をt1.wiki_article_idする

$q = " SELECT  a.wiki_article_id, 
         a.title, 
         a.slug, 
         t1.text, 
         t1.timestamp 
      FROM wiki_articles AS a 
      JOIN wiki_articles_texts AS t1 ON a.wiki_article_id = t1.wiki_article_id 
      INNER JOIN ( 
       select wiki_article_id, max(timestamp) as my_timestamp 
       from wiki_articles_texts 
       group by wiki_article_id 
    ) t2 on a.wiki_article_id = t2.wiki_article_id and t1.timestamp = t1.my_timestamp";