使用左连接从选择查询更新

时间:2013-03-23 16:30:19

标签: php mysql select sql-update

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

作者:

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会话变量,包含活动用户的userID。我的PHP应用程序将假设,因为这个“未读”的消息已被处理,现在它被读取,任何人都可以协助修改上述查询以将mRead更新为1,表明它已被读取,从这里的现有帖子我读到你可以& #39; t在同一个SQL语句中使用UPDATE进行SELECT,是否会有另一种解决方法,距离正确的解决方案还有几英里?。非常感谢。 非常感谢提前。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

您可以在JOIN期间UPDATE使用该表:

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... )