Есть ли способ объединить эти 2 оператора MySQL? - PullRequest
2 голосов
/ 28 июля 2011

Я хотел бы выполнить запрос, который добавляет 1 к полю qa_votes, а затем извлекает результирующее значение этого поля, чтобы я мог показать его во внешнем интерфейсе.

Таким образом, проект кода будетбыть

    $this->db->query("
    UPDATE  qa
    SET     qa_votes = qa_votes +1
    WHERE   qa_id = $question_id;
    ");

с последующим

    $query = $this->db->query("
    SELECT  qa_id, qa_votes
    FROM    qa
    WHERE   qa_id = $question_id;
    ");

Есть ли способ объединить эти два в один запрос?

Ответы [ 3 ]

7 голосов
/ 28 июля 2011

Краткий ответ: №

Длинный ответ: Не с помощью готовой команды.Команда UPDATE не обеспечивает этого.Однако вы можете написать хранимая процедура , которая обновляет и затем возвращает результат.

1 голос
/ 28 июля 2011

Да. Вы можете использовать LAST_INSERT_ID

Если expr задан в качестве аргумента для LAST_INSERT_ID (), значение аргумента возвращается функцией и запоминается как следующее значение, возвращаемое LAST_INSERT_ID ()

Так что вы можете сделать что-то вроде:

$this->db->query("
UPDATE  qa
SET     qa_votes = LAST_INSERT_ID(qa_votes +1)
WHERE   qa_id = $question_id;
");

Вслед за

$query = $this->db->query("SELECT LAST_INSERT_ID()");

MySQL API, который вы используете, может иметь ярлык для извлечения последнего (например, mysql_insert_id () в PHP).

0 голосов
/ 28 июля 2011

Просто объединить их обоих в одну строку SQL?

 $query = $this->db->query("
    UPDATE  qa
    SET     qa_votes = qa_votes +1
    WHERE   qa_id = $question_id;

    SELECT  qa_id, qa_votes
    FROM    qa
    WHERE   qa_id = $question_id;
    ");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...