我正在创建一个包含有包含图片的画廊的作品集网站。我希望该产品组合的用户能够订购图库中的图像。问题本身非常简单,我只是在努力决定要实现的解决方案。
到目前为止,我想到了2种解决方案:
只需添加order
列(或优先级?),然后在该列上使用ORDER BY
子句查询即可。这样做的缺点是要更改单个图像的顺序,我必须更新图库中的每个图像。
第二种方法是添加2个可为空的列next
和previous
,它们仅存储下一张和上一张图像的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/