1

我正在尝试从下表中查询 sql。我已经尝试了很多方法来完成这项工作。但对于我来说,找到解决方案似乎太复杂了。

user_id="200"; // 假设用户 ID 现在是 200。

tb_conversation

-------------------------------------------------------------------------------------
c_id   |   user_one_id   |   user_two_id   |   user_one_delmsg    |   user_two_delmsg
-------------------------------------------------------------------------------------
001    |      200        |      198        |          Y           |        N
------------------------------------------------------------------------------------
002    |      195        |      200        |          Y           |        N
------------------------------------------------------------------------------------
003    |      200        |      193        |          N           |        N
------------------------------------------------------------------------------------

我要做的是查询与上面的user_id匹配的唯一一个表。它可以是表中的 user_one 或 user_two。如果 user_id 在表中是 user_one,那么 user_one_delmsg 不能是“Y”。或者如果 user_id 是表中的 user_two,那么 user_two_delmsg 不能是“Y”

我尝试过的:

$q= "SELECT * from conversation  ORDER BY c_id DESC ";
$_stmt = $conn->prepare($q);
$_stmt->execute();
$row=$_stmt->fetchAll();


foreach ($row as $r) {

if ($user_id==$r['user_one_id']){
    if ( $r['user_one_delmsg']!="Y") {
    //do something

    }
}

if ($user_id==$r['user_two_id']){

    if ( $r['user_two_delmsg']!="Y") {

        //do something

    }
    }

我得到的是: 与查询匹配的结果数组。 我想要的只是一个结果,即最大 c_id 和 user_ x _delmsg 不能是“Y”

我也只使用了 fetch(); 我没有得到我想要的。我也将限制 1 放在查询的最后一个,但它没有帮助。

4

3 回答 3

0

对于给定的用户 ID,请尝试

 Select Max(c_id) from conversation 
 Where 200 in (user_one_id, user_two_id)
     And (user_one_id <> 200 Or user_one_delmsg <> 'Y')
     And (user_two_id <> 200 Or user_two_delmsg <> 'Y')

对于所有 UserId,请尝试:

Select userId , Max(cid) From
 (Select c_id cid, user_one_id userId 
  from conversation
  Where user_one_delmsg <> 'Y'
  Union
  Select c_id cid, user_two_id userId 
  from conversation
  Where user_one_delmsg <> 'Y') Z
Group By UserId
于 2013-08-31T16:31:29.280 回答
0

这将选择 max(c_id) 并检查 user_one_delmsg 是否不等于 y。

select max(c_id), user_one_id from conversation where user_one_delmsg!='y';

这将为 user_one_id 和 user_two_id(特别是提到的 200)选择 max(c_id) 并将检查 user_one_delmsg。

select max(c_id), user_one_id from conservation where user_one_id='200' and 
user_one_delmsg!='y' union select max(c_id), user_two_id from conservation where 
user_two_id='200' and user_two_delmsg!='y';
于 2013-08-31T16:25:51.837 回答
0

尝试使用以下查询

SELECT MAX(c_id) FROM tb_conversation
   WHERE (user_one_id=200 AND user_one_delmsg='N')
      OR (user_two_id=200 AND user_two_delmsg='N')

检查这个小提琴

于 2013-08-31T16:38:09.510 回答