2017-08-22 33 views
0

我想计算两个成员之间的会话数。 当用户1访问用户2的配置文件时,我看到可见的结果。但是,当用户2访问配置文件1时,我没有结果。rowCount where和OR与MySQL和PHP

public function getNumberConversations($sender, $receiver) { 

    $st = Database::getDatabase()->prepare("SELECT id, sender, receiver 
     FROM conversation 
     WHERE sender = ? AND receiver = ? 
     OR receiver = ? AND sender = ? 
    "); 

    $st->execute(array($sender, $receiver, $receiver, $sender)); 

    return $st->rowCount(); 

    } 
+1

'WHERE(发件人=和接收器=?) 或' – JYoThI

+0

另外,你要互换的发送者和接收者的两倍(接收器=和发件人=?):在查询和在数组中。净结果:根本没有交换,并且重复子句'WHERE(sender = $ sender AND receiver = $ receiver)OR(receiver = $ receiver AND sender = $ sender)' – bracco23

+0

我认为在这种情况下括号不是问题 – etsa

回答

3

我想你应该改变

$st->execute(array($sender, $receiver, $receiver, $sender)); 

$st->execute(array($sender, $receiver, $sender, $receiver)); 

你的情况括号OK(和优先级)

2

使用括号为条件

public function getNumberConversations($sender, $receiver) { 

    $st = Database::getDatabase()->prepare("SELECT id, sender, receiver 
     FROM conversation 
     WHERE (sender = ? AND receiver = ?) 
     OR (receiver = ? AND sender = ?) 
    "); 

    $st->execute(array($sender, $receiver, $sender, $receiver)); // also notice this 

    return $st->rowCount(); 

    } 
+0

I已经尝试过但不起作用 – Manudog

+0

然后在你的问题中更新它,否则每个人都会有相同的答案 –

1

您需要为分离条件设置广告支架。你也交换条件,所以它会变得相同。试试以下的答案:

public function getNumberConversations($sender, $receiver) { 

    $st = Database::getDatabase()->prepare("SELECT id, sender, receiver 
     FROM conversation 
     WHERE (sender = ? AND receiver = ?) 
     OR (receiver = ? AND sender = ?) 
    "); 

    $st->execute(array($sender, $receiver, $sender, $receiver)); //<----change here also 

    return $st->rowCount(); 

    }