查询多个表以及if,elseif,else条件

时间:2015-11-12 14:14:58

标签: php mysql

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

  1. 用户查看他的帐户
  2. 用户评论朋友帐户
  3. 用户评论非朋友帐户
  4. 因此,当用户检查自己的帐户时,我会隐藏按钮"添加为朋友"。当他检查非朋友帐户时,我会显示按钮"添加为朋友"。当用户检查朋友帐户时,我想显示该用户是他的朋友的消息。

    这是查询和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

2 个答案:

答案 0 :(得分:1)

你的查询逻辑有点不对。

首先,您需要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_friends user_id = friend_id的记录吗?通常我没有。所以如果没有这样的记录。

因此,您必须将条件if($_SESSION['id'] == $row['user_id'])更改为

if($id == $user_id)

答案 1 :(得分: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 ){

      }
  }
}