我正在创建一个包含有包含图片的画廊的作品集网站。我希望该产品组合的用户能够订购图库中的图像。问题本身非常简单,我只是在努力决定要实现的解决方案。

到目前为止,我想到了2种解决方案:


只需添加order列(或优先级?),然后在该列上使用ORDER BY子句查询即可。这样做的缺点是要更改单个图像的顺序,我必须更新图库中的每个图像。
第二种方法是添加2个可为空的列nextprevious,它们仅存储下一张和上一张图像的ID。这将意味着在更改订单时要更新的数据将更少。但是,设置起来要复杂得多,而且我不确定如何实际实施。


额外的选择会很棒。


这些选择可行吗?
有更好的选择吗?
如何/应该如何实施?


有问题的两个表的当前结构如下:

mysql> desc Gallery;

+--------------+------------------+------+-----+-------------------+-----------------------------+
| Field        | Type             | Null | Key | Default           | Extra                       |
+--------------+------------------+------+-----+-------------------+-----------------------------+
| id           | int(10) unsigned | NO   | PRI | NULL              | auto_increment              |
| title        | varchar(255)     | NO   |     | NULL              |                             |
| subtitle     | varchar(255)     | NO   |     | NULL              |                             |
| description  | varchar(5000)    | NO   |     | NULL              |                             |
| date         | datetime         | NO   |     | NULL              |                             |
| isActive     | tinyint(1)       | NO   |     | NULL              |                             |
| lastModified | timestamp        | NO   |     | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
+--------------+------------------+------+-----+-------------------+-----------------------------+

mysql> desc Image;
+--------------+------------------+------+-----+-------------------+-----------------------------+
| Field        | Type             | Null | Key | Default           | Extra                       |
+--------------+------------------+------+-----+-------------------+-----------------------------+
| id           | int(10) unsigned | NO   | PRI | NULL              | auto_increment              |
| galleryId    | int(10) unsigned | NO   | MUL | NULL              |                             |
| description  | varchar(250)     | YES  |     | NULL              |                             |
| path         | varchar(250)     | NO   |     | NULL              |                             |
| lastModified | timestamp        | NO   |     | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
+--------------+------------------+------+-----+-------------------+-----------------------------+


当前,尚无任何形式的订购实现。

最佳答案

虽然1有点难看,但您可以执行以下操作:

  UPDATE table set order=order+1 where order>='orderValueOfItemYouCareAbout';


这将更新其余所有图像,而您无需做大量的腿部工作。

关于php - 有哪些方法可以将项目的顺序存储在数据库中?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21886851/

10-10 23:39