我正在建立一个预订系统,可以存储预订日期,我关心如何存储该数据。
我希望有一张桌子
order_id DateRSVP
---------- ------------
1 1/1-1/3, 1/5, 1/7
我应该将其存储为字符串,并在,
order_id DateRSVP
---------- ------------
1 1/1, 1/2, 1/3, 1/5, 1/7
或者我应该
order_id DateRSVP
---------- ------------
1 1/1
---------- ------------
order_id DateRSVP
---------- ------------
1 1/2
---------- ------------
order_id DateRSVP
---------- ------------
1 1/3
还是有更有效的方法来实现它
答案 0 :(得分:2)
我会创建两个表。 Orders
和Order_dates
。 Orders
只列出订单信息,包括order_id。 Order_dates
会使用DATE
数据类型存储日期,如下所示:
+----------+------------+------------+
| order_id | start_date | end_date |
+----------+------------+------------+
| 1 | 2016-01-01 | 2016-01-03 |
+----------+------------+------------+
| 1 | 2016-01-05 | 2016-01-05 |
+----------+------------+------------+
| 1 | 2016-01-07 | 2016-01-07 |
+----------+------------+------------+
| 2 | 2016-02-07 | 2016-01-07 |
+----------+------------+------------+
通过这种方式,如果将来需要使用SQL函数和索引,您可以轻松地以正确的方式查询它。正如@Oliver在他的一条评论中所说:"如果您不需要搜索序列化数据,那么存储序列化数据是可以的,特别是如果它需要大量列或甚至专用表。但是,如果有人需要将其用于搜索,订购,分组......那么甚至不要考虑序列化这些数据。"
答案 1 :(得分:0)
:
序列化不是最佳方法,在尝试将日期存储在数据库中时不应使用。以序列化形式存储任何数据库都是可以的,只要您不需要对其进行操作,例如:order by,like(for search),where子句等。当您的数据采用以下形式时,可以专门使用它。动态数组,或者你不需要创建动态表的地方。
Thnx Oliver贡献:)
---------------------- -----
如果你有一个数组,并且你想将它存储在数据库中,那么你可以序列化你的数组,然后将它存储在数据库中
$store = serialize($your_array);
从数据库中检索后;你可以通过以下方式回到阵列:
$result_array = unserialize($sql_value);
更多参考:
serialize
unserialize