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

发布于 2024-12-17 23:44:38 字数 606 浏览 0 评论 0原文

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

我有一个名为 news 的表。

我在我的网站上显示新闻。如果有人阅读新闻,我会将 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语句中更新的行。

Can I join SELECT and UPDATE statement? If yes, how can I do that?

I have table which name is news.

I show news on my website. If someone read news I add 1 to hit. I do that with 2 queries:

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

But I want to join them.

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

Update: the OP wants to update and select the updated rows within one sql statement.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

萌辣 2024-12-24 23:44:38

编写一个存储过程:

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 客户端都支持在单个语句中执行多个操作。
其常见用途是(伪 C# 代码),

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

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

你可能可以做

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

Write a stored procedure:

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

Usage:

CALL ReadNews(2)

Update

By the way, most mysql clients support multiple actions in a single statement.
A common use for this is (Pseude C# Code)

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

which will perform an Insert and Return the id of the newly created record.

You possibly could do

var result = mysql_query("UPDATE news SET hit=hit+1 WHERE id=2; SELECT * FROM news WHERE id = 2");
诠释孤独 2024-12-24 23:44:38

任何数字字段都可以这样做(tinyint、int、float 等)。

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

希望这会有所帮助。

Any numeric field will do it by this (tinyint, int, float, etc).

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

Hope this will help.

久伴你 2024-12-24 23:44:38

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

best way is to write trigger which will increment hit count on select news
When SELECT * FROM news WHERE id=2 LIMIT 1 Fire trigger UPDATE news SET hit=hit+1 WHERE id=2

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文