我想要更新某个表排序后靠前的数据,于是写了一个语法:
update dcproduct set pOrder=pOrder+2 order by pOrder desc,id desc limit 6;这个是可以运行的,结果是更新了前六条记录。
后来发现漏了个条件要连表查询于是写成:
update dcproduct a join dcproductsort b on a.pSortid=b.id set pOrder=pOrder+2 where parentid=1 order by a.pOrder desc,id desc limit 6;
结果就报错了,有没有人知道怎么写啊?

解决方案 »

  1.   

    #1221 - Incorrect usage of UPDATE and ORDER BY 
      

  2.   

    UPDATE中如果是两个表,则不能使用 order / limit
      

  3.   

    try:
    update dcproductsort b join
    (select * from dcproduct 
    order by pOrder desc,id desc limit 6) a
      on a.pSortid=b.id set pOrder=pOrder+2 where parentid=1 
      

  4.   

    6楼的大大,报错
    #1288 - The target table a of the UPDATE is not updatable 
    我的数据很简单,product表是产品,productsort是分类,pOrder是产品的排序字段,前台排序按照 排序字段和id字段排,
    目前要做的就是把前台显示在最前面的几条数据的pOrder增加2。先谢谢大家帮助拉,如果不行我只能通过其他程序实现了。
      

  5.   

    在MYSQL 5。.1。32下测试,SQL语句没有问题
    UPDATE lsb3 b JOIN 
    (SELECT * FROM lsb2 
    ORDER BY dd DESC LIMIT 2) a 
      ON a.dd=b.dd1 SET dd1=dd1+1 WHERE dd1=1000
      

  6.   

    楼主提供一下你的 create table 语句  dcproduct,dcproductsort
    另外建议提供测试数据的 insert into 的语句。这样别人可能在本地搭建与你相同的环境以测试。建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
      

  7.   

    昨天突然上不到网,
    问题算了,我已经用php程序解决,不用mysql的语法解决了。回9楼的,虽然你的语句没错,但是我要update的数据是在a表而不是在b表,所以你的不报错我的报错。