在php mysql中无法获取正确的数据

时间:2018-10-11 12:35:13

标签: php mysqli

表:请求

id          friend_id           candidate_id
==          ==============      ==============
1           20180928115958      20180925112428

2           20181008181142      20180925112428

3           20180928115958      20181008181142

4           20181010181207      20180928115958

5           20181008181142      20181010181207

6           20181010181207      20180925112428

查询

<?php
    $_SESSION['candidate_id']=20181010181207;

    $sql_ac = mysqli_query($con,"select friend_id,candidate_id from request where candidate_id='".$_SESSION['candidate_id']."' or friend_id='".$_SESSION['candidate_id']."'");
    while($row_ac = mysqli_fetch_array($sql_ac))
    {
        if($row_ac['friend_id']==$_SESSION['candidate_id'] && $row_ac['candidate_id']==$_SESSION['candidate_id'])
        {
            echo "";
        }
        else
        {
            echo $row_ac['friend_id']."<br/><br/>";
            echo $row_ac['candidate_id']."<br/><br/>";
        }
    }
?>

意外的输出:

20181010181207

20180928115958

20181008181142

20181010181207

20181010181207

20180925112428

预期产量

20180928115958

20181008181142

20180925112428

在此代码中,我具有表request,该表具有两个键字段,即friend_idcandidate_id。现在,我$_SESSION['candidate_id']='20181010181207'。因此,如上所述,如何获得预期的输出?请帮助我。

谢谢

3 个答案:

答案 0 :(得分:1)

我认为您想要

while($row_ac = mysqli_fetch_array($sql_ac))
{
    if($row_ac['friend_id'] != $_SESSION['candidate_id']
        echo $row_ac['friend_id']."<br/><br/>";
    }
    if($row_ac['candidate_id'] != $_SESSION['candidate_id']
        echo $row_ac['candidate_id']."<br/><br/>";
    }
}

这将显示与'input'相同的值,换句话说,删除20181010181207条目。

或者作为一个单行:

echo $row_ac['candidate_id']==$_SESSION['candidate_id'] ? $row_ac['friend_id] : $row_ac['candidate_id'];

答案 1 :(得分:1)

您的请求是:

select 
  friend_id,
  candidate_id
from request 
where candidate_id=:candidate_id or friend_id=:candidate_id

因此,通常返回:candidate_id在列friend_idcandidate_id中的所有行:

4           20181010181207      20180928115958

5           20181008181142      20181010181207

6           20181010181207      20180925112428

现在您想要的是:

20180928115958 // this is candidate_id of row 4

20181008181142 // this is friend_id of row 5

20180925112428 // this is candidate_id of row 6

如果只希望列“ XXX_id”的值不等于:candidate_id,请尝试以下操作:

select 
  IF(friend_id = :candidate_id, '', friend_id) as friend_id,
  IF(candidate_id = :candidate_id, '', candidate_id) as candidate_id
from request 
where candidate_id=:candidate_id or friend_id=:candidate_id

这样,您将为与:candidate_id相匹配的列返回空值。

现在只需在显示测试之前添加测试即可,以免出现空行:

if (!empty($row_ac['friend_id'])
    echo $row_ac['friend_id']."<br/><br/>";
if (!empty($row_ac['candidate_id'])
    echo $row_ac['candidate_id']."<br/><br/>";

您也可以这样做:

select 
  IF(friend_id = :candidate_id, candidate_id, friend_id) as result_id
from request 
where candidate_id=:candidate_id or friend_id=:candidate_id

这样,您将仅返回一个结果:不等于:candidate_id的结果。

然后只需echo $row_ac['result_id']."<br/><br/>";即可得到想要的东西

答案 2 :(得分:0)

尝试这个

我希望它能工作

if($row_ac['friend_id']==$_SESSION['candidate_id']){
    echo $row_ac['candidate_id']."<br/><br/>";
else{
    echo $row_ac['friend_id']."<br/><br/>";
}

因为在您的情况下,And条件始终为false,否则部分将执行,因此请尝试使用if else条件并检查