php - MySQL 三表连接——用户和好友图片

标签 php mysql sql database join

已经尝试了几个小时 - 不幸的是我卡在了这个三表连接上。

问题是我可以检索用户 friend 的所有照片。但我想要 friend 的照片和用户的照片。但是,我不确定它的语法。

这是我的表结构:

active_users: id, username, name, etc...
friends: relationship_id (PK), friend1_ID (FK), friend2_ID (FK), status
pictures: picture_id (PK), user_id (FK), name, date, etc.

所以这是我目前必须获取用户 friend 照片的语句:

SELECT p.*, a.username
FROM friends f
JOIN active_users a ON (f.friend_1ID='$userID' AND f.friend_2ID=a.id AND status=1)
JOIN pictures p ON (p.user_id=f.friend_2ID)

我如何修改它以包含用户的照片?我可以使用 UNION 来做到这一点,但我相信(或者有人告诉我)如果有一种方法可以通过用户输入,那么这样做很昂贵并且容易受到 SQL 攻击。

我还考虑过将用户添加为自己的 friend - 这可以接受吗?

最佳答案

您可以修改加入以加入好友或用户:

SELECT p.*, IF(p.user_id = friend_2ID, a.username,'$username')
FROM friends f
JOIN active_users a ON (f.friend_1ID='$userID' AND f.friend_2ID=a.id AND status=1)
JOIN pictures p ON (p.user_id=f.friend_2ID OR p.user_id = '$userID')
GROUP BY p.photo_id

请注意,您应该确保 $userID 已转义,或者使用参数化查询更好。

关于php - MySQL 三表连接——用户和好友图片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13925803/

相关文章:

php - 付款日期基于时间间隔

mysql - SQL 触发器 : Insert deleted row into a table at once without listing every column as INSERT values

mysql - 如何通过网络从sql server导出或导入sql server数据库到mysql server

sql - Oracle "(+)"运算符

PHPExcel 无法工作

php - PHP 中的产品过滤器从 MySQL 表中过滤

sql - 选择BETWEEN列值

sql - 如何创建一个约束来确保输入的日期总是 >= 今天或 future 的日期?

php - 将 tiff(带路径)转换为 png 并删除背景(透明)- 在 PHP 中使用 Imagemagick

php - 如何将从 SQL 数据库表中提取的时间戳显示为用户时区?