5

私はこの図を持っていますフィード付きで投稿

私がしたいのは、この出力を持つことです: いいねの投稿 - Facebook のように

このクエリをどのように実行できますか?

私はこのコードを持っています

SELECT users.firstname, users.lastname, 
       users.screenname, posts.post_id, posts.user_id,
       posts.post, posts.upload_name, 
       posts.post_type, posts.date_posted
FROM website.users users
INNER JOIN website.posts posts ON (users.user_id = posts.user_id)
ORDER BY posts.pid DESC
//PROBLEM with this one is that it only views the post from all users.

//SO I added
SELECT COUNT(user_id) AS friends, SUM(user_id = ?) AS you, user_id
FROM feeds WHERE post_id = ?
//This one will give you two fields containing how many different users **feeds** the
post

みんな助けてください。実際、これはFacebook の「LIKE」ステータスに従っているだけです。唯一のことは、私はこの種のことについて素人ではないので、すべての回答をお待ちしております. 私は本当にあなたの助けが必要です

4

2 に答える 2

3

私があなたを正しく理解していれば、feedsテーブルとの外部結合が必要であり (posts関連付けられていない場合でもすべてを保持するためfeeds)、各投稿のそのようなすべてのフィードと必要な情報GROUP BY post.pidをまとめるためです。SELECT

MySQL の関数を使用して、特定の投稿の「フィード」を持つGROUP_CONCAT()すべてのユーザー (最大 ) のコンマ区切りリストを取得します (必要に応じて修飾子で区切り文字を変更できます)。group_concat_max_lenSEPARATOR

SELECT users.firstname, users.lastname, 
       users.screenname, posts.post_id, posts.user_id,
       posts.post, posts.upload_name, 
       posts.post_type, posts.date_posted,
       COUNT(feeds.user_id) AS friends,   -- number of "likes"
       SUM(feeds.user_id = ?) AS you,     -- did I like this?
       GROUP_CONCAT(feeds.user_id)        -- who likes it?
FROM website.users users
INNER JOIN website.posts posts ON (users.user_id = posts.user_id)
LEFT  JOIN website.feeds feeds ON (posts.post_id = feeds.post_id)
GROUP BY posts.pid
ORDER BY posts.pid DESC

アップデート

自分自身を除く、投稿に「いいね」したユーザーのフルネームを取得するには、もう一度usersテーブルに参加する必要があります。

SELECT users.firstname, users.lastname, 
       users.screenname, posts.post_id, posts.user_id,
       posts.post, posts.upload_name, 
       posts.post_type, posts.date_posted,
       COUNT(feeds.user_id) AS friends,                      -- number of "likes"
       SUM(feeds.user_id = ?) AS you,                        -- did I like this?
       GROUP_CONCAT(
         CASE WHEN NOT likes.user_id = ? THEN                -- exclude self
           CONCAT_WS(' ', likes.firstname, likes.lastname)   -- full names
         END
       )
FROM website.users users
INNER JOIN website.posts posts ON (users.user_id = posts.user_id)
LEFT  JOIN website.feeds feeds ON (posts.post_id = feeds.post_id)
LEFT  JOIN website.users likes ON (feeds.user_id = likes.user_id)
GROUP BY posts.pid
ORDER BY posts.pid DESC
于 2012-05-03T12:13:02.553 に答える
2

すべてのユーザーに対してそれを実行し、同時にフィードを取得したい場合は、次のfeedテーブルに参加する必要があります。

SELECT u.firstname, u.lastname, 
   u.screenname, p.post_id, p.user_id,
   p.post, p.upload_name, 
   p.post_type, p.date_posted,
   COUNT(f.user_id) AS friends, SUM(f.user_id = ?) AS you
FROM website.users u
INNER JOIN website.posts p ON (u.user_id = p.user_id)
LEFT  JOIN website.feeds f ON (p.post_id = f.post_id)
GROUP BY p.pid
ORDER BY p.pid DESC

これはトリックを行う必要があります...

于 2012-05-03T12:18:27.510 に答える