2014-01-20 5 views
0

я получил запрос UPDATE, как следует:MySQL UPDATE не обновляется должным образом

UPDATE orders 
SET 
    order_status = 1, 
    amount_remaining = 0.00000000 
WHERE 
    market_pair_id = 2 AND user_id = 1 
     AND sale_rate = 0.00000001 
     AND sale_amount = 100.00000000 
     AND order_type = 1 LIMIT 1 

Вот снимок моих данных из PHPMyAdmin:

http://cl.ly/image/3m3M2f2R3R3Z/Screen%20Shot%202014-01-20%20at%2012.55.03.png

Там явно 3 соответствующих строк для моего запрос, однако ни один из них не обновляется с затронутым сообщением 0 строк. Может кто-то проливает свет на то, что происходит?

Дополнительная информация: Я не могу обновить с помощью первичного ключа, потому что у меня его нет, и моя цель - просто обновить 1 из нескольких совпадающих строк моих данных.

Большое спасибо заранее

+0

Если вы заключаете значения в кавычках, делает это до сих пор не Работа? – ggdx

+1

Попытайтесь «выбрать», используя те же критерии, если это не сработает, то он не находит данные по какой-то причине, может помочь цитата. Если это так, и все еще обновление не работает, попробуйте добавить 'commit' и посмотреть, что произойдет. – adrin

+0

Это потому, что вы используете двойные значения для сравнения в where where. Использование двойных значений в сравнении не является надежным. – vidaica

ответ

0

Удалить LIMIT 1 с конца вашего запроса и попробуйте

UPDATE orders 
    SET 
     order_status = 1, 
     amount_remaining = 0.00000000 
    WHERE 
     market_pair_id = 2 AND user_id = 1 
      AND sale_rate = 0.00000001 
      AND sale_amount = 100.00000000 
      AND order_type = 1 
+0

Это работает, но он обновляет 2 из 3 строк, вместо желаемого 1 из 3. – Linkandzelda

+0

жаль, что я не понял вас, что вы подразумеваете под 2 из 3 рядов. Этот запрос shoul обновляет строки, которые соответствуют запросу where – semirturgay

0

.try это

UPDATE orders 
SET 
    order_status = 1, 
    amount_remaining = 0.00000000 
WHERE order_id IN (
    SELECT order_id FROM (
     SELECT order_id FROM orders 
      WHERE market_pair_id = 2 
      AND user_id = 1 
      AND sale_rate = 0.00000001 
      AND sale_amount = 100.00000000 
      AND order_type = 1 
     LIMIT 1 
    ) tmp 
); 
+0

0 затронутых строк, поскольку они хранятся как десятичные числа (32,8) – Linkandzelda

+0

@Linkandzelda попробуйте мой обновленный ответ. –

+0

На секунду я подумал, что это сработало, но это не так. Я узнал, что если все данные одинаковы в таблице, это работает, но если эти данные разные (разные количества и ставки) не работают, то, как и мой первоначальный запрос, как я снова это проверил. – Linkandzelda

Смежные вопросы