Я пытаюсь написать функцию, чтобы ВЫБРАТЬ наименее недавно выбранное значение из таблицы в моей базе данных. Я делаю это, выбирая строку, а затем сразу же изменяя поле last_used
.
Поскольку это связано с SELECT и UPDATE, я пытаюсь сделать это с помощью блокировок. Блокировки должны гарантировать, что одновременное выполнение этого запроса не будет работать в одной строке.
Запрос отлично работает в phpMyAdmin, но не работает в Magento. Я получаю следующую ошибку:
SQLSTATE[HY000]: General error
Ошибка возникает здесь:
#0 /var/www/virtual/magentodev.com/htdocs/lib/Varien/Db/Adapter/Pdo/Mysql.php(249): PDOStatement->fetch(2)
Вот код моей модели, включая SQL-запрос:
$write = Mage::getSingleton('core/resource')->getConnection('core_write');
$sql = "LOCK TABLES mytable AS mytable_write WRITE, mytable AS mytable_read READ;
SELECT @val := unique_field_to_grab FROM mytable AS mytable_read ORDER BY last_used ASC LIMIT 1;
UPDATE mytable AS mytable_write SET last_used = unix_timestamp() WHERE unique_field_to_grab = @val LIMIT 1;
UNLOCK TABLES;
SELECT @val AS val;";
$result = $write->raw_fetchrow($sql, 'val');
Я также пытался использовать raw_query
и query
вместо raw_fetchrow
, но безуспешно.
Есть мысли о том, почему это не работает? Или есть лучший способ сделать это?
EDIT : Я начинаю думать, что это может быть связано с драйвером PDO, который Magento определенно использует. Я думаю, что phpMyAdmin использует mysqli, но я не могу это подтвердить.