mysql - mysql查询中查看好友的清晰方法

标签 mysql

  • 首先,我有一个与用户表标识符相对应的 id,然后通过 get 传递给 php。
  • 我想检查:nickname.users、friends.id_friends、friends.id_adder、friends.id_adder 和friends.id_tipus,但最好的方式是检查friends.id_adder、friends.id_linked 并正确获取昵称。我编写的代码有效。

我的查询:

    SELECT users.nickname,
            friends.id_friends, friends.id_adder, friends.id_added, friends.id_tipus 
            FROM friends 
            LEFT JOIN users ON users.id=friends.id_added OR users.id=friends.id_adder
            WHERE 
            (friends.id_adder='".$id."' AND (SELECT nickname FROM users WHERE id='".$id."')<>users.nickname) 
            OR 
            (friends.id_added='".$id."' AND (SELECT nickname FROM users WHERE id='".$id."')<>users.nickname);

最佳答案

我会将该查询转换为:

SELECT    u1.nickname,
          friends.id_friends, 
          friends.id_adder, 
          friends.id_added, 
          friends.id_tipus 
FROM      users u1
LEFT JOIN friends  ON u1.id IN (friends.id_added, friends.id_adder)
LEFT JOIN users u2 ON u2.id IN (friends.id_added, friends.id_adder)
                   AND u2.nickname <> u1.nickname
WHERE     u1.id = ?

您不应将 $id 值注入(inject) SQL 字符串,因为这会使您的代码容易受到 SQL injection 的攻击。 。而是使用 prepared statements .

关于mysql - mysql查询中查看好友的清晰方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42542779/

相关文章:

MySQL 查询等效于 "AND",而 "IN"是 "OR"?

php - having 子句中的未知聚合列

Mysql查询以获取每种类型的有限行

php - MySQL数据库xampp

php - 如何获取Mysql中所有卷的总和?

mysql - 在 MySql cli 查询中获取 ASCII 结果

mysql - 这个 SQL 查询有什么问题吗?

c# - 在 ASP.NET CORE 应用程序 EF Core 库中不从数据库返回新插入的记录 ID?

php - 修改后的可重用查询?

mysql - 在 perl 中重新加载 mysql 数据库的最快方法