我有一个项目表,每个项目都通过一个名为 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());
这很有效。但是,项目的图片顺序被破坏,因为从已删除类别转移的项目可能会在默认类别中创建重复的图片处理器。我知道如何以多次调用数据库的方式解决这个问题。这感觉太贵了。我的疑问是,我是否可以使用一些我不知道的技术来更新增量图片顺序整数到数据库,因为它被调用而不将该行作为密钥?有点像:
$uncategorise = "UPDATE pictures
SET category = '0',
pictureorder = 'TotalofDefaultCategory++'
WHERE category = '$categoryID'
AND username = '$useID'";
$queryUncat = mysql_query($uncategorise) or die(mysql_error());
提前致谢!
根据Kyle的建议,我正在尝试以下方面但没有成功:
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”。但是,如果我包含addtional行,则没有任何变化。我没有任何错误,但pictureorder不会改变。类别也没有。语法是否正确?
此外,如果我将pictureorder = (SELECT...
替换为pictureorder = 2
,它会按预期工作。所以除了语法不正确之外我无法看到一个可能的问题(我希望它不是,因为我担心,以这种方式包含COUNT
真是太好了。)
答案 0 :(得分:1)
您可以使用服务器端var:
第一次查询:
select @cnt := 1;
第二次查询:
update pictures SET pictureorder := @cnt, @cnt := @cnt + 1
WHERE ...
order by pictureorder, ...
您需要一个适当的order by
子句,以确保具有重复pictureorder值的记录按正确顺序排列 - 移动的记录是否已经出现在类别中的记录之前或之后?
答案 1 :(得分:1)
您是否尝试获取该特定用户的默认类别的总和?如果您没有尝试按用户执行此操作,请从我添加到您的查询中的部分中删除AND username='$useID'
UPDATE pictures
SET category = '0',
pictureorder = (SELECT COUNT(category) + 1 WHERE category='0' AND username='$useID')
WHERE category = '$categoryID'
AND username = '$useID';
答案 2 :(得分:0)
如果类别0的订单范围为1-150,而要删除的类别5的范围为1-7,则应该只需将150添加到当前值,然后获取数字151-157
UPDATE pictures
SET category = '0',
pictureorder = pictureorder + '$default_max_pictureorder'
WHERE category = '$categoryID'
AND username = '$userID'"
答案 3 :(得分:0)
我已经在这个问题上抓了两天,因为事实证明没有一个解决方案是正确的。虽然我无法在PHP的第二个查询中添加用户定义的变量,但是Marc B引导我走上了正确的道路,尽管我能够调用它(因此一些错误的试验和错误)。有一种方法可以在PHP中查询MySQL,它可以进行多次查询并连接它们,但我已经使用的mysql_query
方法在我的网站中交织得太紧,以使其易于更改。
相反,基于要删除的类别($ categoryID)具有从1开始并递增的现有图片处理器的事实。我能够使用此现有信息添加到此页面上的COUNT建议中。所以,虽然我不得不使用两个查询,但对于第二个查询,我只是将已删除类别的现有图片顺序添加到当前用户的默认类别的总计数中。