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