我有一个包含4列ID,PLZ(德国邮政编码),long和lat的表
CREATE TABLE `table` (
`ID` INT(5) UNSIGNED NULL,
`PLZ` INT(5) UNSIGNED NULL,
`lat` INT(5) UNSIGNED NULL,
`long` INT(5) UNSIGNED NULL
)
COLLATE='utf8'
当我使用INSERT添加邮政编码时,新的邮政编码将添加到ID最高的表格末尾。
这破坏了PLZ邮政编码的升序。
我现在想根据PLZ邮政编码的升序对ID进行重新排序。
它应该是 MySQL的一个命令。
最好的方法是什么?
P.S。 我可以这样做:
SELECT RANK() Over (ORDER BY plz) As id , plz, long, lat FROM `table`;
这样,我创建了一个虚拟列。每次我需要此列时,都必须运行此查询。我想将查询结果保存在一个列中,即使我创建了一个新的“ idsorted”,也没问题。
但是随后又以另一种方式提出了问题:“我现在如何使用新的ID列更新我的真实列“ idnew”?”
我要一个mysql命令。
答案 0 :(得分:0)
错误的方法。
如果PLZ是唯一的,则不需要id
。摆脱id
列,并使PLZ
成为PRIMARY KEY
。然后,您的问题就解决了。而且您的桌子较小。而且某些查询运行得更快。双赢。
此外,除非您指定SELECT
,否则ORDER BY
的输出没有排序 。即使更改了PK,您仍然需要ORDER BY PLZ
。
(已添加)
如果PLZ
不是唯一的,则保留id
,但不是取决于ID值以任何特定顺序排列,而 do 使用ORDER BY
以所需的顺序获取输出。
(更多)
好的,PLZ
不是唯一的。如果要查看PLZ
排序的整个列表,请提出以下要求:
ORDER BY PLZ
或者,要在每个邮政编码中保持一致的顺序,
ORDER BY PLZ, ID
如果您还需要其他“顺序”,请有一列(或多列)定义顺序。不用担心ID。
答案 1 :(得分:-1)
如果我理解正确,则应将ID索引的排序顺序更改为升序。
例如:
CREATE TABLE t (
ID INT,
PLZ INT,
Long [your type] ,
Lat [your type],
INDEX ID_asc (ID ASC)
);