2011-11-23 51 views
5

我可以加入SELECT和UPDATE语句吗?如果是的话,我该怎么做?有没有什么办法可以让MySQL在单个语句中更新并选择更新的行?

我有表名是消息

我在我的网站上显示新闻。如果有人读新闻,我加到命中。我这样做有2个查询:

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语句中更新的行。

+1

,你可以做一个存储过程 – Headshota

+1

我不太明白你想要做什么。你想用另一个表中的数据更新一个表中的值吗? – Wiseguy

+2

你能否给我们提供一个你真正想要什么样的例子,我们可以帮你 –

回答

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#代码)

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"); 
0

任何数字字段都可以通过this(tinyint,int,float等)来完成。

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

希望这会有所帮助。

0

最好的办法是写触发这将增加打在选择新闻 计数当SELECT * FROM新闻WHERE ID = 2 LIMIT 1个火触发更新新闻组命中=命中+ 1 WHERE ID = 2

相关问题