我问这个有限的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,是否会有另一种解决方法,距离正确的解决方案还有几英里?。非常感谢。 非常感谢提前。
答案 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... )