尝试删除产品时在magento中出错

尝试删除产品时在magento中出错,magento,product,sql-delete,mysql-error-1064,outofrangeexception,Magento,Product,Sql Delete,Mysql Error 1064,Outofrangeexception,当我尝试删除Magento中的产品时,我会遇到下一个错误,我不知道问题出在哪里 SQLSTATE[22003]:数值超出范围:1690 BIGINT无符号值超出范围 请试试这个: DELETE FROM sales_flat_quote WHERE updated_at < DATE_SUB(Now(),INTERVAL 30 DAY); 从sales\u flat\u quote中删除,其中更新日期为0 THEN%1$s-1 ELSE 0 END',$adapter->quoteIde

当我尝试删除Magento中的产品时,我会遇到下一个错误,我不知道问题出在哪里

SQLSTATE[22003]:数值超出范围:1690 BIGINT无符号值超出范围

请试试这个:

DELETE FROM sales_flat_quote WHERE updated_at < DATE_SUB(Now(),INTERVAL 30 DAY);
从sales\u flat\u quote中删除,其中更新日期为

它适合我。

要解决此问题,请执行以下步骤

  • 使用PhpMyAdmin进入您的数据库
  • 执行备份(最好先备份)
  • 选择您正在使用的Magento数据库
  • 选择表销售平报价(第二页)
  • 选择结构选项卡
  • 在名为“项目计数”的行中选择“更改”
  • 转到名为“Attributes”列上的下拉列表,将值更改为最高值,即空白“(无值)”,而不是默认选择“无符号
  • 单击“保存”,您就可以开始了


    并立即删除产品

    我设法使其能够编辑第221行的文件app/code/core/Mage/Sales/Model/Resource/Quote.php:

    'items_count' => new Zend_Db_Expr("CASE WHEN q.items_count>0 THEN " . $adapter->quoteIdentifier('q.items_count') . ' - 1 ELSE 0 END')
    

    基本上,我添加了case-when语句,以防止它在值已经为0时减去1?让我知道,我会发布我的修复信息,告诉我为什么会发生这种情况?Magento在执行任何操作时都遵循大量的数据结构。当数据库大小较大时,它将显示执行时间错误。在这种情况下,您可以从htdocs/phpmyadmin增加apache执行时间。谢谢我在Magento发现了一个bug。。。基本上,当我们删除一个产品时,更新报价的观察者并不关心DB中的列items\u qty是否未签名。。。有时,该观察者尝试插入-1,然后出现问题:您的解决方案可能有效,1'有问题的报价可能超过30天,2'删除报价不好,3'这不是一个真正的修复,因为它没有修复问题的根源。更改Magento的默认数据库设置不是一个好主意!这应该是公认的答案,因为它是唯一一个真正修复magento内核中bug的答案。通过确保将
    q.items\u count
    的两个实例都引用到sql中,可以稍微改进它:
    'items\u count'=>new Zend\u Db\u Expr(sprintf('CASE WHEN%1$s>0 THEN%1$s-1 ELSE 0 END',$adapter->quoteIdentifier('q.items\u count'))
    同意,但不应直接编辑Magento核心文件。相反,通过在app/code/local/Mage/Sales/Model/Resource/Quote.php中放置一个副本来覆盖该文件,并在其中进行更改。这是我见过的解决此问题的最佳方法。