php - 从 friend 和所有者的帖子中选择 INNER JOIN

标签 php mysql sql

我有 3 个表:user_info、friend_match、posts

用户信息:account_id | 用户名

friend_match : friendship_id | friend1(第一个的 account_id)| friend2(第二个的 account_id) 好友匹配包含 2 1 和 1 2、1 3 和 3 1。

帖子:post_id | poster_id | post_message | 发布日期

我如何从用户的 friend 和他自己的 friend 那里获得帖子?

我已经试过了,但它似乎效率低下,而且我在分页方面遇到了问题,因为用户可能发布了或多或少的帖子,这会导致分页失败。

SELECT * FROM 
                    (
                    SELECT p.post_id, p.post_message, UNIX_TIMESTAMP(p.date_posted) as date_posted, u.username FROM posts p
                    INNER JOIN friend_match fm
                        ON p.poster_id = fm.friend1
                    INNER JOIN user_info u
                        ON u.account_id = p.poster_id
                    WHERE fm.friend2 = $sessionid

UNION ALL

                    SELECT p.post_id, p.post_message, UNIX_TIMESTAMP(p.date_posted) as date_posted, u.username FROM posts p
                    INNER JOIN user_info u
                        ON u.account_id = p.poster_id
                    WHERE p.poster_id = $sessionid
                    )z
                    ORDER BY post_id DESC LIMIT $page,$limit";

我希望的最终结果包含按从最新到最旧顺序排列的帖子,其中 friend 的帖子以可靠分页的方式与 session 持有者的帖子混合在一起。

最佳答案

不是完整答案,但可以使用 sub-select有点像这样:

SELECT * FROM posts p
  inner join user_info u ON u.account_id = p.poster_id
WHERE p.poster_id = $sessionid or p.poster_id IN 
(SELECT f.friend1 FROM friend_match f
 WHERE f.friend2 = $sessionid)
ORDER BY post_id DESC LIMIT $page, $limit;

关于php - 从 friend 和所有者的帖子中选择 INNER JOIN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12380557/

相关文章:

php - 使用 php ://input 内存耗尽

php - 覆盖 WordPress 中的插件功能

sql - 从该表中的多个列中选择一次不同值,保留原始顺序吗?

sql - 按邮政编码邻近度搜索 - MySql

php - 令人讨厌的流行 "No input file specified."与 nginx_php-fastcgi

mysql - 如果哪里不包括主键组合的所有列,mysql超时?怎么了?

php - laravel 如何从其他表中选择字段

php - 调试 cron PHP 脚本

c# - Linq to SQL Left Join、Order 和 Group By Count

php - Codeigniter - 使用分页,仅显示数据库中的用户数据