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