0

次の4つのテーブルがあります。

posts
posts_replies
likes
myfavorite

次のクエリを使用して、最初の3つのテーブルからデータを返しています。しかし、4番目のテーブル(myfavorite)も含めて、ユーザーがお気に入りとして選択した投稿をロードしたいと思います。

SELECT  posts.title, 
    posts.num, 
    posts.status, 
    posts.category, 
    posts.content, 
    posts.member_num, 
    COUNT( posts_replies.post_num ) AS count, 
    COUNT( likes.comment_num ) AS likes_count
FROM    posts
    LEFT JOIN posts_replies 
        ON ( posts_replies.post_num = posts.num )
    LEFT JOIN likes 
        ON ( likes.comment_num = posts_replies.num )
WHERE   posts.member_num = '84'
GROUP   BY posts.num 
ORDER   BY posts.num 

myfavoriteテーブルには次のフィールドがあります。

id (primary key)
member_num 
recordNum 
table ('posts' OR 'members')

上記のクエリに次の左結合を追加して、myfavoriteテーブルからもレコードをプルしようとしましたが、機能しませんでした。

LEFT JOIN myfavorite 
ON ( myfavorite.recordNum = posts.num )

私はこの質問と混同しています、これに関するアドバイスはありますか?

ありがとうございました

編集 **

postsとテーブルのサンプルデータを含むテーブルは次のmyfavoriteとおりです。

テーブル:myfavorite

id  |   member_num  |   recordNum   |   table   
72  |   84          |   74          |   blyrbs

テーブル:posts

title       |   num |   status  |   category    |   content                 |   member_num
Testing Post|   117 |       1   |   0           |   testing...              |   84
My Fav Post |   107 |       1   |   0           |   this is the fav post... |   22
4

2 に答える 2

0

次のクエリを試すことができますか?

SELECT  posts.title, 
    posts.num, 
    posts.status, 
    posts.category, 
    posts.content, 
    posts.member_num, 
    myfavourite.record_num,
    myfavourite.table,
    COUNT( posts_replies.post_num ) AS count, 
    COUNT( likes.comment_num ) AS likes_count
FROM    posts
    LEFT JOIN posts_replies 
        ON ( posts_replies.post_num = posts.num )
    LEFT JOIN likes 
        ON ( likes.comment_num = posts_replies.num )
    LEFT JOIN myfavorite 
        ON ( myfavorite.member_num = posts.member_num )
WHERE   posts.member_num = 84
GROUP   BY posts.num 
ORDER   BY posts.num 
于 2013-03-05T03:44:26.447 に答える
0

わかりました、私自身が私の答えを見つけました、私は実際にクエリのこの部分を間違って使用していました:

LEFT JOIN myfavorite 
    ON ( myfavorite.member_num = posts.member_num )

これがどこにあるべきか:

    LEFT JOIN myfavorite 
        ON ( myfavorite.recordNum = posts.num )

また、次の句を変更しましたWHERE。元の句は次のとおりです。

WHERE   posts.member_num = 84

そして、編集されたものは次のとおりです。

WHERE   posts.member_num = 84 OR myfavorite.member_num = 84

したがって、最終的な作業クエリは次のとおりです。(Query took 0.2901 sec)

SELECT  posts.title, 
    posts.num, 
    posts.status, 
    posts.category, 
    posts.content, 
    posts.member_num, 
    myfavorite.recordNum,
    myfavorite.`table`,
    COUNT( posts_replies.post_num ) AS count, 
    COUNT( likes.comment_num ) AS likes_count
FROM    posts
    LEFT JOIN posts_replies 
        ON ( posts_replies.post_num = posts.num )
    LEFT JOIN likes 
        ON ( likes.comment_num = posts_replies.num )
    LEFT JOIN myfavorite 
        ON ( myfavorite.recordNum = posts.num )
WHERE   posts.member_num = 84 OR myfavorite.member_num = 84
GROUP   BY posts.num 
ORDER   BY posts.num 

思い通りに2枚のレコードを引っ張っています。

しかし、私が見ている新しい問題があります。それは、クエリにかかる時間です。上記のクエリは効率的ではないと思います。

where句をに戻すとWHERE posts.member_num = 84、クエリは0.0059 sec

これが本当に最良で効率的な方法かどうか知りたいですか?

ところで、@ Slowcoder、@ Melanie、@ethrbunnyに時間とアドバイスをありがとう。

于 2013-03-05T06:54:48.633 に答える