替代mySQL数据库中的存储数组。每个订单多个日期

时间:2015-09-21 16:43:28

标签: php mysql

我正在建立一个预订系统,可以存储预订日期,我关心如何存储该数据。

我希望有一张桌子

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

还是有更有效的方法来实现它

2 个答案:

答案 0 :(得分:2)

我会创建两个表。 OrdersOrder_datesOrders只列出订单信息,包括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