好的,一个信息数据库。专用于显示顺序的列。如果我进行更改,例如移动行,或者如果我删除行或向数据库的末尾添加行,则向上或向下移动。
我希望按顺序保持显示顺序,没有间隙。比如1-2-3-4-5-6-7-8-9
如果删除行1-2-3-4-5-7-8-9
如果我想在第5行之后添加一行(在第6位),我可能会遇到问题。我认为保持这些数字顺序没有差距。是对的吗?我试过了:
ALTER TABLE data DROP id;
ALTER TABLE data ADD id int(10) AUTO_INCREMENT;
我知道这不是一件好事。此外,在测试时,它没有保持我的数据有序。
管理展示订单的任何想法?我是否必须将所有数据加载到阵列中并在那里进行管理?好像MySql已经有了解决方案???
答案 0 :(得分:1)
我担心AUTO_INCREMENT
字段不会对它们重新排序,您最好添加一个排序字段。
答案 1 :(得分:1)
为此目的,SQL具有ORDER BY
语法。
除非在select语句中指定了ORDER BY
,否则任何reational数据库都不会保存存储数据的顺序或检索数据的顺序。
如果您只想保留输入数据的顺序,那么一个简单的时间戳就可以实现这一点。
答案 2 :(得分:0)
出于这个原因,查询中有"ORDER BY" command:
SELECT * FROM 'TABLE' WHERE 'TABLE.FIELD' = 'XY' ORDER BY 'TABLE.FIELD';
答案 3 :(得分:0)
我制定的解决方案是有一个用于按顺序显示数据的列。我使用AUTO_INCREMENT
列来跟踪每个条目的specific_id
。
列是:auto_id | display_order | specific_id | category | subject | text
输入新数据时。我INSERT
到表格末尾的新行。然后使用mysql_insert_id()
我检索AUTO_INCREMENT
号码,我使用SELECT MAX(display_order)
获取display_order
的高数量,然后使用我的数据获取UPDATE
新行将AUTO_INCREMENT
号码放入specific_id
列,因为我确实需要/使用该号码。
使用display_order
列作为参考,我可以将信息(specific_id | category | subject | text
)移动到任何地方。我选择移动信息,而不是仅仅更改display_order编号,并将display_order
列按顺序(大部分)保留在AUTO_INCREMENT
列中。只是个人偏好。
删除行时。再次,使用display_order
我将信息向下移动(数字),然后移动DELETE
表格的最后一行。再次,个人偏好,保持整洁。
好处是:1)一切都在一张桌子里。 2)我使用AUTO_INCREMENT
数字为每个数据条目提供specific_id
,这是必须的。 3)display_order
列中没有间隙,无需查找/引用,计算位置和混乱信息。
其他说明:在引用数据块时,我使用ORDER BY display_id
和ORDER BY display_id DESC
来保持秩序。