我的问题是我需要创建一个订单,以便我可以在此 Web 应用程序中上下移动项目。但是,我无法通过具有增量值的索引对 order(ord 列)值进行索引,因为同一个表中有多个公司使用此列。
我的表结构是这样的:
现在我认为最简单的方法是执行 MAX 并获取最高的数字,并以某种方式将其用作索引,这样当您访问特定公司时,您就不会两次获得相同的数字为公司添加新条目。
SELECT MAX(ord) FROM phonebook WHERE `id_company` = "51";
这是一条明智的路线吗?或者也许为每个客户端创建一个新数据库并创建和索引并将其用作订单条目的方式?
最佳答案
我建议您在分配 ord
值时不要追求完美。您可以按如下方式摆脱此问题:
- 不要使
ord
独一无二。 (事实并非如此)。 - 依靠
phonebook_name
的顺序来获得良好的名称顺序。 MySQL 正是为了这个目的而提供了这些出色的不区分大小写的排序规则。 - 我想您正在尝试将公司的某些条目放在第一位,而其他条目则放在最后。将每个人的
ord
列设置为50
,然后为您想要的条目提供第一个较小的数字,最后为您想要的条目提供较高的数字。
当您显示特定公司的数据时,请这样做......
SELECT whatever, whatever
FROM phonebook
WHERE id_company = 11
ORDER BY ord, phonebook_name, phonebook_number, id_phonebook
这个ORDER BY
子句将执行您想要的操作,并且如果存在重复,它将保持稳定。然后,您可以在用户界面中使用如下查询向上移动条目。
UPDATE phonebook SET ord=ord-1 WHERE id_phonebook = :recordnumber
关于mysql - 从mysql查询中获取最大的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31143856/