2017-04-21 13 views
0

2つのテーブルを結合し、結合するときに複数の一致があるため、2番目のテーブルからランダムフィールドを返したいとします。MySQL結合してランダムフィールドを選択

たとえば、私はusersテーブルとuser_postsテーブルを持っています。私は各ユーザのidとランダムな投稿idと投稿のmessageuser_postsテーブルに入れたいと思っています。各ユーザーはuser_postsテーブルに複数の投稿を持つことができます。

This answerは私がしようとしていることを説明していますが、機能しません。ここに私のクエリです:

SELECT user_id, post_id, message FROM (
    SELECT users.id AS user_id, user_posts.id AS post_id, message 
    FROM users INNER JOIN user_posts ON users.id = user_id 
    ORDER BY RAND() 
) AS a GROUP BY user_id 

はテストのために、私は1のidを持つユーザーのためにuser_postsテーブル内の2つの行を追加、それは毎回同じポストを取得しています。クロスを使用して

答えて

0

が、私は理解していないランダムつのポストを取得し、

select u.id,RandomPostbyUser.* 
    from users u 
    cross apply (  
     SELECT user_posts.id AS post_id, message 
     FROM users u1 INNER JOIN user_posts ON u1.id = u.id 
     order by RAND() 
     LIMIT 1) RandomPostbyUser 
+0

を表示するには、ユーザーに参加するために適用され、これはコンパイルさえないのですか? – user1203585

+0

もう一度お試しください。エラー – maSTAShuFu

+0

を今すぐ送信してください。ただし、各ユーザーのすべての投稿が返されます。私はちょうど1つのランダムなものをしたい。 – user1203585

関連する問題