php - SQL Join 语句收集用户的 friend 和用户的消息

标签 php mysql sql pdo

我有 3 个表:消息、用户和 friend 。

Messages: msg_id, uid_fk, message, alert, created, uploads, owner
Users: uid, first_name, last_name
Friends: friend_one, friend_one

当一个用户与另一个用户成为 friend 时,我通过以下方式记录他们的 uid:friend_one:172friend_two:58 | friend 一:58 friend 二:172 我下面的代码运行完美,并选择了所有用户的消息更新。我的问题是,我不仅需要选择用户自己的所有消息,还需要选择他或她 friend 的所有消息。

如上所述,下面的内容仅选择用户的状态更新,我已经努力了几个小时,不仅选择用户的状态更新,还选择他或她的 friend 。

$query = $db->prepare("SELECT M.msg_id, M.uid_fk, M.message, M.alert, 
M.created, M.uploads , M.owner , U.uid , U.first_name , U.last_name FROM 
messages M, users U  WHERE M.uid_fk=U.uid and M.uid_fk= :uid_fk limit 10");
$query->execute(array(':uid_fk' => $uid));

($uid是登录用户的 session ID)

还有我选择 friend 的代码,以防万一:

$friends_sql = $db->prepare("SELECT a.first_name, a.uid, a.last_name FROM users 
a, friends b WHERE a.uid = b.friend_two AND b.friend_one = :friend_one ORDER BY 
b.friend_id DESC LIMIT 8");
$friends_sql->execute(array(':friend_one' => $uid));

最佳答案

以下内容应返回用户及其好友的最近 10 条消息。

SELECT 
    M.msg_id, 
    M.uid_fk, 
    M.message, 
    M.alert, 
    M.created, 
    M.uploads, 
    M.owner, 
    U.uid, 
    U.first_name, 
    U.last_name 
FROM 
    users u 
    JOIN messages m ON m.uid_fk = u.uid
WHERE
    u.uid = :uid
    OR u.uid IN (
        SELECT f.friend_two
        FROM friends f
        WHERE f.friend_one = :uid
    )
ORDER BY m.created DESC
LIMIT 10

关于php - SQL Join 语句收集用户的 friend 和用户的消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11654843/

相关文章:

javascript - 想要 PHP 和 JS 表单(空字段/密码匹配)验证吗?

php - CodeIgniter 客户 Controller 类说 session 未定义

php - 按第二个表 php 中的名称对帖子进行分组

mysql - MySQL中如何计算当前行与上一行之间的时间差

mysql - 根据表的值组合获取记录

sql - Laravel Eloquent 选择 CASE?

SQL 转换为 GMT 日期时间

php - 合并两个数组以使整数值尽可能接近相等

c++ - 为什么这个输出十六进制而不是一个句子?连接器/C++

javascript - 创建一个遍历页面的查询字符串 HTML 表单?