0

我以有限的 SQL 理解问这个问题,如果很明显,请提前道歉。我有一个选择查询,它返回一个“未读”消息的结果集,并与我正在处理的简单 Web 应用程序的用户表(称为作者)中的发件人 ID 匹配。下表描述如下:

作者:

aId int(20) NO  PRI NULL    auto_increment
aUser   varchar(30) NO  UNI NULL    
aPass   varchar(40) NO      NULL    
aEmail  varchar(30) NO  UNI NULL    
aBio    mediumtext  YES     NULL    
aReg    datetime    NO      NULL    

留言:

msgId   int(20) NO  PRI NULL    auto_increment
mSender int(20) NO  MUL NULL    
mReciever   int(20) NO  MUL NULL    
mTitle  tinytext    NO      NULL    
mBody   mediumtext  NO      NULL    
mRead   tinyint(4)  NO      NULL    
mDate   datetime    NO      NULL    

我正在使用的选择查询是(Tks martina):

 SELECT messages.mTitle, messages.mBody, messages.mDate, authors.aUser 
 FROM messages LEFT JOIN authors on aId=mSender WHERE mReciever = '$aId' AND mRead = '0'

$aId 是一个 php 会话变量,其中包含活动用户的用户 ID。我的 php 应用程序将假定,因为此“未读”消息已被处理,它现在已被读取,任何人都可以协助修改上述查询以将 mRead 更新为 1,表明它已被读取,从这里的现有帖子我读到你可以't SELECT with UPDATE 在同一个 SQL 语句中,是否有另一种方法来解决这个问题,我是否远离正确的解决方案?非常感谢任何帮助。提前谢谢了。

4

2 回答 2

1

你听到的是正确的。您不能在一个语句中选择和更新。您的 PHP 代码必须执行两个不同的 SQL 命令。选择后,使用 PHP 和您的结果来确定您返回的消息的 ID,然后在消息表上执行 UPDATE 语句,例如“UPDATE messages SET mRead=1 WHERE msgId IN (?)”。

于 2013-03-23T16:37:36.353 回答
0

您可以JOINUPDATE:

UPDATE table1
LEFT JOIN table2 ON(table1.id = table2.id)
SET ...
WHERE ...

并选择WHERE语句中的记录。

相关:https ://stackoverflow.com/a/806925/1815881

我的博文:http: //athlan.pl/mysql-update-join/

第二种方法是选择要更新和执行的记录 ID:

UPDATE table
SET ...
WHERE id IN( ...your select... )
于 2013-03-23T16:41:03.683 回答