gpt4 book ai didi

php - 友情系统

转载 作者:行者123 更新时间:2023-11-29 10:17:36 28 4
gpt4 key购买 nike

我有两个表:

用户:

  • 用户 ID
  • 用户名
  • ...

friend :

  • user_id(发送好友请求的用户)
  • friend_id(收到好友请求的用户)
  • 已确认(1 = 好友,0 = 好友请求)

我希望每个用户都能看到他们的好友和好友请求。我在显示 friend 用户名时遇到问题。我让它工作了,但这是一个糟糕的解决方案,我想仅使用一个查询来解决这个问题(如果可能的话)。

我尝试过:

    $sql = "SELECT friends.friend_id, friends.user_id, users.user_name FROM friends
INNER JOIN users ON friends.user_id = users.user_id
WHERE friends.user_id = " . $_SESSION['user_id'] . " AND confirmed = 1
OR friends.friend_id = " . $_SESSION['user_id'] . " AND confirmed = 1;";

我的问题是,它会显示 user_id 与好友表中 user_id 相同的用户的 user_name 。我的查询需要检查 user_id 是否与 $_SESSION['user_id'] 相同,如果相同,则必须返回 user_name user_idfriends 表中 friend_id 相同的用户的 >。

最佳答案

按以下方式制定 SQL 查询,

$sql = "SELECT 
" . $_SESSION['user_id'] . " as user_id,
IF(u2.user_id = " . $_SESSION['user_id'] . ", u1.user_id, f.friend_id) as friend_id,
IF(f.user_id = " . $_SESSION['user_id'] . ", u2.user_name, u1.user_name) as friend_username
FROM users as u1
INNER JOIN friends as f
ON u1.user_id = f.user_id
INNER JOIN users as u2
ON f.friend_id = u2.user_id
WHERE (f.user_id = " . $_SESSION['user_id'] . " OR f.friend_id = " . $_SESSION['user_id'] . ") AND f.confirmed = 1";

这是现场演示: http://sqlfiddle.com/#!9/e10252/7

<小时/>

旁注:了解 prepared statement因为现在你的查询很容易受到 SQL 注入(inject)攻击。另请参阅how you can prevent SQL injection in PHP .

关于php - 友情系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49883844/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com