我有一个条目表,每个条目通过一个名为category的行中的整数与一个类别单独关联。我还有一个显示顺序,每个项目,相关的相关类别。这将保存在名为pictureorder的行中。直截了当?
当用户删除包含与之关联的项目/图片的类别时,我的问题就会出现。我告诉mySQL搜索与该类别相关联的任何项,并将它们与一个由0表示的“默认”类别相关联。

// IF THERE'S ANY PICTURES THAT WERE IN THAT CATEGORY,
// MOVE THEM INTO THE DEFAULT CATEGORY.
$uncategorise = "UPDATE pictures
    SET category = '0'
    WHERE category = '$categoryID'
    AND username = '$userID'";
$queryUncat = mysql_query($uncategorise) or die(mysql_error());

这很管用。但是,项目的pictureorder已断开,因为从已删除类别传输的项目可能会在默认类别中创建重复的pictureorder。我知道如何通过多次调用数据库来解决这个问题。这感觉太贵了。我的问题是,我是否可以使用一些我不知道的技术来将递增的pictureorder整数更新到数据库中,因为它被调用时没有使该行成为键?大致如下:
$uncategorise = "UPDATE pictures
    SET category = '0',
        pictureorder = 'TotalofDefaultCategory++'
    WHERE category = '$categoryID'
    AND username = '$useID'";
$queryUncat = mysql_query($uncategorise) or die(mysql_error());

提前谢谢!
更新1
根据凯尔的以下建议,我正在尝试以下方法,但没有成功:
UPDATE pictures
    SET category = '0',
        pictureorder = (SELECT COUNT(category) + 1 WHERE category='0' AND username='$useID')
    WHERE category = '$categoryID'
    AND username = '$useID';

如果省略pictureorder = (SELECT COUNT(category) + 1 WHERE category='0' AND username='$useID'),则只要类别与$categoryID$useID匹配,该类别确实会更改为“0”。但是,如果我包含了附加行,就不会有任何变化。我没有任何错误,但图片顺序不变。分类也不一样。语法正确吗?
另外,如果我用pictureorder = (SELECT...替换pictureorder = 2,它也会按预期工作。因此,除了语法不正确之外,我看不出其他可能的问题(我希望,正如我担心的那样,这样包含一个COUNT并不是太好了)。

最佳答案

您可以使用服务器端变量:
第一个查询:

select @cnt := 1;

第二个问题:
update pictures SET pictureorder := @cnt, @cnt := @cnt + 1
WHERE ...
order by pictureorder, ...

您需要一个适当的order by子句来确保具有重复pictureorder值的记录按正确的顺序放置-移动的记录是在已经属于该类别的记录之前还是之后?

10-08 03:46