复杂的sql语句里面有4个条件

时间:2013-08-31 16:18:00

标签: mysql sql

我正在尝试从下表中查询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,但它没有帮助。

3 个答案:

答案 0 :(得分: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';

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

对于所有用户,请尝试:

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

答案 2 :(得分: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')

检查此Fiddle