【问题标题】:PHP SQL query proper syntaxPHP SQL查询正确的语法
【发布时间】:2017-07-26 16:07:01
【问题描述】:

我有一个名为 friends 的数据库表,它包含 3 列:added_byadded_whoadded_time

在 PHP 脚本中,我尝试使用如下查询返回特定用户的朋友:

SELECT * 
FROM friends 
WHERE added_by = '$specific_user_id' 
OR added_who = '$specific_user_id';

我如何获取朋友的用户 ID,因为它可能位于 added_byadded_who 列中,具体取决于谁先添加了谁。我知道如何做到这一点,例如检查 added_who == $specific_user_id 是否为真,如果它是真的,那么朋友的 id 在added_by 列中,反之亦然,但我想知道是否有更快、更好的方法。

【问题讨论】:

  • added_by 和类似的行或列吗?
  • 也许这并不重要,但您使用的是哪个 SQL 数据库引擎? MS SQL Server、MySQL、postgreSQL 等?
  • 如果这个问题和PHP有关,我的建议是插入占位符并将数据作为数组传递:... WHERE added_by = ? OR added_who = ?
  • 我正在使用 MySQL

标签: php mysql sql syntax


【解决方案1】:

您可以为此使用简单的IF 语句。

SELECT *, IF(added_by = '$specific_user_id', added_who, added_by) AS friend_id
FROM friends 
WHERE added_by = '$specific_user_id' 
OR added_who = '$specific_user_id';

【讨论】:

    【解决方案2】:

    使用 CASE 语句。有关详细信息,请参阅CASE 的 MySQL 文档。

    应用的一个例子是:

    SELECT CASE added_by WHEN '$specific_user_id' THEN added_who ELSE added_by END as friend_id  
    FROM friends 
    WHERE added_by = '$specific_user_id' 
        OR added_who = '$specific_user_id';
    

    【讨论】:

      【解决方案3】:

      试试这个查询,它是您想要进行的 2 个查询之间的简单联合

       SELECT added_who FROM friends 
       WHERE added_by = '$specific_user_id' 
       UNION 
       SELECT added_by FROM friends
       WHERE added_who = '$specific_user_id'
      

      【讨论】:

        猜你喜欢
        • 2017-07-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-11-16
        • 2018-01-27
        • 2014-03-15
        • 1970-01-01
        • 2019-12-13
        相关资源
        最近更新 更多