Mysql 仅当满足where条件时才选择最后一行

Mysql 仅当满足where条件时才选择最后一行,mysql,Mysql,我有一个邮件专栏,我正试图弄清楚如何在“已发送”文件夹中显示邮件 我运行以下查询: SELECT `text`, `created` FROM `messages` WHERE `status` = 1 ORDER BY `created` DESC LIMIT 1 我想引入一个条件,以便仅当status=1的最后一行也有user\u from=$user(如果最后一行有user\u to=$user,则不应返回任何结果) 我的查询应该是什么?您可以使

我有一个邮件专栏,我正试图弄清楚如何在“已发送”文件夹中显示邮件

我运行以下查询:

 SELECT
    `text`,
    `created`
 FROM
    `messages`
 WHERE
    `status` = 1
 ORDER BY `created` DESC
 LIMIT 1
我想引入一个条件,以便仅当
status=1
的最后一行也有
user\u from=$user
(如果最后一行有
user\u to=$user
,则不应返回任何结果)


我的查询应该是什么?

您可以使用
子查询

select `text`, `created` from T1
( SELECT
    `text`,
    `created`
 FROM
    `messages`
 WHERE
    `status` = 1
 ORDER BY `created` DESC
 LIMIT 1) T1
where `user_from` = $user and `user_to` != $user

如果我正确理解了你的问题,你想这样做吗:

SELECT
    `text`,
    `created`
 FROM
    `messages`
 WHERE
    `status` = 1
    AND `user_from` = $user 
    AND `user_to` != $user
 ORDER BY `created` DESC
 LIMIT 1

当然,您需要用字符串替换
$user
,或者使用准备好的语句将变量插入查询中

选择状态为1的最新消息,然后将其用作嵌套查询,并检查是否输出这一行结果的条件:

   select `text`, `created`
    from
    (
        SELECT
            `text`,
            `created`,
             user_from,
             user_to
         FROM
            `messages`
         WHERE
            `status` = 1
         ORDER BY `created` DESC
         LIMIT 1
        ) t
        where (user_from = $user) 
              and (not (user_to = $user))

这将返回由
$user
发送的最新消息。。我需要它,以便仅当发送的最后一条消息是由
$user
发送的时才返回结果(如果最后一条消息不是由$user发送的,则不应返回任何内容)