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

时间:2011-11-23 08:39:44

标签: mysql select join

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

我的表名是 新闻

我在我的网站上显示新闻。如果有人阅读新闻,我会将 1 添加到点击。我这样做有两个查询:

mysql_query("SELECT * FROM news WHERE id=2 LIMIT 1");
mysql_query("UPDATE news SET hit=hit+1 WHERE id=2");

但我想加入他们。

id | title     | content           |hit
---+-----------+-------------------+---
1  | sdfsdfdsf | dfsdffdsfds836173 |5
2  | sfsdfds   | sdfsdsdfdsfdsfsd4 |9
3  | ssdfsdfds | sdfdsfs           |3

更新: OP希望更新并在一个sql语句中选择更新的行。

3 个答案:

答案 0 :(得分: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

用法:

CALL ReadNews(2)

<强>更新

顺便说一下,大多数mysql客户端在一个语句中支持多个动作。 常见的用途是(Pseude C#Code)

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

将执行Insert并返回新创建记录的id。

你可以做到

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

答案 1 :(得分:0)

任何数字字段都会由此完成(tinyint,int,float等)。

mysql_query("UPDATE news SET hit=hit+1 WHERE id=2 ");

希望这会有所帮助。

答案 2 :(得分:0)

最好的方法是编写触发器,增加选择新闻的命中数 当SELECT * FROM news WHERE id = 2 LIMIT 1 Fire trigger UPDATE news SET hit = hit + 1 WHERE id = 2