【问题标题】:Query multiple tables and if, elseif, else condition查询多个表和if、elseif、else条件
【发布时间】:2015-11-12 14:14:57
【问题描述】:

我正在尝试根据查询返回显示不同的消息/按钮。有3种不同的情况。

  1. 用户查看他的帐户
  2. 用户评论好友帐号
  3. 用户评论非好友账户

所以当用户检查他自己的帐户时,我隐藏了“添加为朋友”按钮。当他检查非朋友帐户时,我显示按钮“添加为朋友”。当用户检查朋友帐户时,我想显示该用户是他的朋友的消息。

这是查询和 if、elseif、else 条件。逻辑有问题,但无法弄清楚到底是什么。

if(isset($_GET['id']) && is_numeric($_GET['id'])){
      $id = $_GET['id']; {     
$result = $pdo->prepare("SELECT usr.*, userFriends.*
                         FROM users usr
                            LEFT JOIN user_friends userFriends
                                ON usr.id = userFriends.friend_id
                         WHERE id = ?                           
                         LIMIT 1");

    $result -> bindParam(1, $id, PDO::PARAM_INT);
    $result -> execute();
    foreach ( $result as $row )
    {
         // some html here
        if($_SESSION['id'] == $row['user_id'])
        { 
            echo ''; 
        } 
        elseif ($id == $row['friend_id'])
        {
            echo ' Already friends ';
        }
        else                            
        { 
            echo ' Add as friend '; 
        }
    }
 }

所以$_SESSION['id'] 是当前的(登录用户)。

$id 是非朋友/朋友个人资料

$row['user_id'] 是表 user_friends 中的当前用户

$row['friend_id'] 是来自user_friends 表的非好友/好友 ID

【问题讨论】:

  • 能否复制var_dump($result)的结果;请?
  • 同查询。
  • 那么你能打印 $row 的值吗?如果您的案例没有按预期工作,那么问题一定存在,我刚刚发现,您首先检查 user_id 如果然后是friend_id,这是故意的吗?
  • 现在我的好友按钮被隐藏了。在当前用户上是“已经朋友”的消息。在非好友按钮上是隐藏的并且没有消息。
  • 是的,因为在IF 上,我会在页面上查看当前用户个人资料的时间。 elseif 我想检查他们是否已经是朋友,即在朋友用户页面上。 else 是非好友页面

标签: php mysql


【解决方案1】:

你的逻辑有点不对..

你想检查什么?您想检查 $id 是否是 $_SESSION['id'] 的朋友.. 所以您应该根据 $id 或 $_SESSION['id'] 进行选择?

if(isset($_GET['id']) && is_numeric($_GET['id'])){
   //the first thing you need to check is that is this you are viewing your own profile by just checking this and without even need to query.
   if($_SESSION['id'] == $_GET['id']){
      echo '';
   } else {
       $id = $_GET['id'];

       $result = $pdo->prepare("SELECT usr.*, userFriends.*
                     FROM users usr
                        LEFT JOIN user_friends userFriends
                            ON usr.id = userFriends.friend_id
                     WHERE **Your ID Column**= ?                           
                     LIMIT 1");

      $result -> bindParam(1, $_SESSION['id'], PDO::PARAM_INT);
      $result -> execute();
      //check if the result return rows?
      // if return rows of data, it's already friend
      // else its not friend yet

      // what's the purpose for this loop then?
      foreach ( $result as $row ){

      }
  }
}

【讨论】:

    【解决方案2】:

    您的查询逻辑有点错误。

    首先你需要iduser_idfriend_id

    由于$id = $_GET['id']; 我猜$id var 保持friend_id(个人资料用户的ID 尝试查看)。

    但您需要以某种方式获取当前的user_id

    点赞$user_id = $_SESSION['id'];

    然后:

    SELECT u.id user_id, uf.frien_id
    FROM users u
    LEFT JOIN user_friends uf
    ON u.id = uf.user_id
       AND  uf.friend_id = ?                           
    WHERE u.id = ?
    LIMIT 1
    
    ...
    
    $result -> bindParam(1, $id, PDO::PARAM_INT);
    $result -> bindParam(1, $user_id, PDO::PARAM_INT);
    

    你真的有user_friendsuser_id = friend_id的记录吗?通常我不会。所以如果没有这样的记录。

    所以你必须将你的条件if($_SESSION['id'] == $row['user_id'])改为

    if($id == $user_id)
    

    【讨论】:

    • 当前用户(登录用户)是$_SESSION['id']
    • 像这样我在每个用户上都获得了相同的个人资料......因为我猜是 $_SESSION['id']。
    • 因为你没有按当前用户过滤你的user_friends表,而只是按friend_id,所以如果这个porfile所有者是任何用户的朋友,则查询成功
    猜你喜欢
    • 2021-07-11
    • 2010-10-12
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    • 2021-09-03
    • 2016-11-21
    • 1970-01-01
    相关资源
    最近更新 更多