Php 选择不同表的两列之间的差/负

Php 选择不同表的两列之间的差/负,php,mysql,sql,join,pdo,Php,Mysql,Sql,Join,Pdo,我正试图计算一条消息是否被看到/看不见以及是否被阅读/未读 在data\u chats\u parties表中,有两个字段,last\u seen和last\u read 在data\u chats\u messages表中,有一个字段created,表示消息的创建时间 我需要从last\u seen中减去时间戳,从created中减去last\u read 当对同一个表的列执行数学运算时,查询工作正常,但当我使用不同的表时,它返回一个空结果 以下是我现有的查询: SELECT

我正试图计算一条消息是否被看到/看不见以及是否被阅读/未读

data\u chats\u parties
表中,有两个字段,
last\u seen
last\u read

data\u chats\u messages
表中,有一个字段
created
,表示消息的创建时间

我需要从
last\u seen
中减去时间戳,从
created
中减去
last\u read

当对同一个表的列执行数学运算时,查询工作正常,但当我使用不同的表时,它返回一个空结果

以下是我现有的查询:

  SELECT
        data_chats.id AS chat,
        data_chats_parties.*,
       (SELECT COUNT(data_chats_parties.id) FROM data_chats_parties
        WHERE data_chats_parties.chat = data_chats.id) AS total_parties,
        data_chats_messages.created AS last_message_created,
        data_chats_messages.author AS last_message_author,
        data_chats_messages.author_type AS last_message_author_type,
        data_chats_messages.message AS last_message,

        (data_chats_messages.created - data_chats_parties.last_seen) AS unseen,
        (data_chats_messages.created - data_chats_parties.last_read) AS unread

      FROM data_chats
        INNER JOIN data_chats_parties ON data_chats_parties.chat=data_chats.id
        LEFT JOIN data_chats_messages ON data_chats_messages.chat=data_chats.id AND data_chats_messages.active=1
      WHERE
        data_chats.active=1 AND
        data_chats_parties.member=1 AND
        data_chats_parties.status >= 1
      GROUP BY data_chats_parties.chat
      ORDER BY last_message_created DESC
假设该查询按计划工作,如果
未读
未读
>0
,则该查询为未读或未读

理想情况下,我可以将
未读
未看
设置为
1
0
,而不是改变值,这样排序会更容易,但如果这不可能,我原来的方法就足够了。

尝试使用,就像这样:

SELECT
    data_chats.id AS chat,
    data_chats_parties.*,
   (SELECT COUNT(data_chats_parties.id) FROM data_chats_parties
    WHERE data_chats_parties.chat = data_chats.id) AS total_parties,
    data_chats_messages.created AS last_message_created,
    data_chats_messages.author AS last_message_author,
    data_chats_messages.author_type AS last_message_author_type,
    data_chats_messages.message AS last_message,

    IF(data_chats_messages.created > data_chats_parties.last_seen,1,0) AS unseen,
    IF(data_chats_messages.created > data_chats_parties.last_read,1,0) AS unread

  FROM data_chats
    INNER JOIN data_chats_parties ON data_chats_parties.chat=data_chats.id
    LEFT JOIN data_chats_messages ON data_chats_messages.chat=data_chats.id AND data_chats_messages.active=1
  WHERE
    data_chats.active=1 AND
    data_chats_parties.member=1 AND
    data_chats_parties.status >= 1
  GROUP BY data_chats_parties.chat
  ORDER BY last_message_created DESC