我有一个名为 booking 的表,该表的列为 contact_number 。
为单次预订插入多个联系电话的最佳做法是什么?我已附上一张图片,其中1个条目的联系电话用逗号隔开,而其他2个条目的预订相同。我想到的最后一件事是为联系人创建一个单独的表。最好的方法是什么?
我要在codeigniter中编写一个用于多个联系人的数组。
答案 0 :(得分:2)
如果我是您,我会在客户表中添加客户信息。如果他们(客户)有多个联系电话,则可以在“更多信息”列中输入类似信息,当他们再次预订您的身份时,他们将已经有一个记录。它会给您一种记住他们是谁的感觉(有点像市场策略[也许?])
答案 1 :(得分:2)
我可以想到3种方式:
使用单独的表格并与预订有一对多关系
使用JSON字符串将它们存储在一个字段中
使用多个字段,例如最多5个(联系电话1,联系电话2 ..)
明智地选择。首先考虑您(将)需要什么以及您打算做什么,然后选择方法。
答案 2 :(得分:1)
创建一个数组并使用JSON编码
$contact_number = array(
'mobile' => '+1 32313213',
'fax' => '+1 32432432',
'phone' => '+1 8984234234'
);
$booking_contact = json_encode($contact_number);
现在,您可以将$booking_contact
插入数据库。如果要使用它,只需解码JSON即可将关联数组传递为真
//Suppose $row is containing you row result
$booking_contact = json_decode($row['booking_contact'], true);
echo $booking_contact['mobile']; // Output +1 32313213
echo $booking_contact['fax']; // Output +1 32313213
echo $booking_contact['phone']; // Output +1 8984234234
答案 3 :(得分:0)
RDBMS中有一个潜规则-绝不使用以逗号分隔的字符串来实现m:n关系-这完全违反了第一个范式。
有关此问题的更多信息,请查看here
您需要的是:
booking
(如您已经提到的)contact
(我假设您已经有一个桌子,因为您已经有数字了)一张桌子booking_contact
,其中包含字段(booking_id
,contact_id
)现在,如果您希望预订ID中的所有联系人都只需使用Codeigniter风格编写
$query = $this->db
->select('*')
->from('contact c')
->join('booking_contact bc', 'c.contact_id = bc.contact_id', 'left')
->join('booking b', 'bc.booking_id = b.booking_id')
->where('b.booking_id', 1)
->get();