Есть ли способ на MySQL, чтобы обновить и выбрать обновленные строки в одной инструкции t? - PullRequest
5 голосов
/ 23 ноября 2011

Могу ли я присоединиться к операторам SELECT и UPDATE? Если да, как я могу это сделать?

У меня есть таблица с именем news .

Я показываю новости на моем сайте. Если кто-то читает новости, я добавляю 1 к , ударил . Я делаю это с 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

Обновление: ОП хочет обновить и выбрать обновленные строки в пределах одного оператора SQL.

Ответы [ 3 ]

1 голос
/ 14 июня 2012

Написать хранимую процедуру:

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

, который будет выполнять вставку и возврат идентификатора вновь созданной записи.

Возможно, вы могли бы сделать

var result = mysql_query("UPDATE news SET hit=hit+1 WHERE id=2; SELECT * FROM news WHERE id = 2");
0 голосов
/ 14 июня 2012

лучший способ - написать триггер, который будет увеличивать количество посещений выбранных новостей. Когда ВЫБРАТЬ * ИЗ новостей, ГДЕ id = 2 LIMIT 1 Сработать триггер UPDATE новости SET нажать = хит + 1, где id = 2

0 голосов
/ 23 ноября 2011

Это может сделать любое числовое поле (tinyint, int, float и т. Д.).

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

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...