2015-01-31 3 views
0

Мне нужно выбрать строки таблицы, а затем обновить поле строк. Например:Mysql: сначала выберите затем обновление в одном запросе

"SELECT * FROM `messages` WHERE `timestamp`>'1422680952'" 

Тогда я хочу, чтобы обновить поле, что строки.

+0

обновление с чем? – SMA

+0

для примера: "SELECT * FROM' messages' WHERE 'timestamp'> '1422680952' набор обновлений' display' = '1' " – Jajarm

ответ

1

операции, которую вы описали, возвращая результирующий из SELECTи выполнения UPDATE не может быть выполнено в одном операторе SQL в MySQL.

Вам понадобятся два отдельных оператора SQL: a SELECT и UPDATE.

С точки зрения MySQL, нет необходимости запускать SELECT перед запуском UPDATE, можно запустить только UPDATE.

UPDATE `messages` SET somecol = 'somevalue' WHERE `timestamp`>'1422680952' 

(Запрос в вопросе заключен в двойных кавычках. Это приводит нас подозревать, что вы работаете это утверждение из библиотеки интерфейса базы данных на языке, такие как PHP.)

Это возможно чтобы получить несколько операторов для выполнения как часть одной транзакции. Но насколько сам сервер MySQL фактически обрабатывает указанные операции, это будет два отдельных оператора.

0

Вы можете использовать транзакцию, для этой цели , где вы можете иметь как выбрать и обновление внутри транзакции

START TRANSACTION; 

    -- Let's get the current value 
    SELECT value FROM counters WHERE id = 1 FOR UPDATE; 

    -- Increment the counter 
    UPDATE counters SET value = value + 1 WHERE id = 1; 

    COMMIT; 

Обычно это делается с таким образом

try { 
    // First of all, let's begin a transaction 
    $db->beginTransaction(); 

    // A set of queries; if one fails, an exception should be thrown 
    $db->query('select query'); 
    $db->query('update query'); 

    // If we arrive here, it means that no exception was thrown 
    // i.e. no query has failed, and we can commit the transaction 
    $db->commit(); 
} catch (Exception $e) { 
    // An exception has been thrown 
    // We must rollback the transaction 
    $db->rollback(); 
} 
+0

Как использовать транзакцию mysql в php? – Jajarm

+0

http://www.mysqltutorial.org/php-mysql-transaction/ проверить это – eLemEnt

0

Вы можете использовать синтаксис ниже, если вы просто обновляете таблицу:

Update messages 
Set display = 1 
Where timestamp >'1422680952' 
0

Для обновления строки вам необязательно выбирать строки. Попробуйте что-то вроде:

UPDATE messages 
SET display = 1 
WHERE timestamp >'1422680952' 
Смежные вопросы