有没有办法在MySQL上更新并在单个语句中选择更新的行?

Som*_*one 5 mysql select join

我可以加入SELECT和UPDATE语句吗?如果是的话,我该怎么做?

我有桌子,这个名字是新闻.

我在我的网站上显示新闻.如果有人看过新闻,我会加1点击.我用2个查询做到了这一点:

mysql_query("SELECT * FROM news WHERE id=2 LIMIT 1");
mysql_query("UPDATE news SET hit=hit+1 WHERE id=2");
Run Code Online (Sandbox Code Playgroud)

但我想加入他们.

id | title     | content           |hit
---+-----------+-------------------+---
1  | sdfsdfdsf | dfsdffdsfds836173 |5
2  | sfsdfds   | sdfsdsdfdsfdsfsd4 |9
3  | ssdfsdfds | sdfdsfs           |3
Run Code Online (Sandbox Code Playgroud)

更新: OP想要更新并在一个sql语句中选择更新的行.

Jür*_*ock 1

写一个存储过程:

delimiter //;
DROP PROCEDURE IF EXISTS ReadNews//;
CREATE PROCEDURE ReadNews(IN newsId INT)
BEGIN
    SELECT * FROM news WHERE id=newsId LIMIT 1;
    UPDATE news SET hit=hit+1 WHERE id=newsId;
END
Run Code Online (Sandbox Code Playgroud)

用法:

CALL ReadNews(2)
Run Code Online (Sandbox Code Playgroud)

更新

顺便说一句,大多数 mysql 客户端都支持在单个语句中执行多个操作。其常见用途是(伪 C# 代码)

var result = DB.Execute("INSERT INTO table (id, name) VALUES (1, 'test'); SELECT LAST_INSERT_ID()");
Run Code Online (Sandbox Code Playgroud)

它将执行插入并返回新创建的记录的 id。

你可能可以做

var result = mysql_query("UPDATE news SET hit=hit+1 WHERE id=2; SELECT * FROM news WHERE id = 2");
Run Code Online (Sandbox Code Playgroud)