在 PHP 中存储复选框中的多个 Id 的可行解决方案是什么?

发布于 2024-11-19 13:08:14 字数 910 浏览 0 评论 0原文

我有一个数据库表 prop_amenities ,其中包含以下列

在此处输入图像描述

这是创建表我在上表中使用的是,

CREATE TABLE `prop_amenities` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `amenity_id` int(11) NOT NULL,
  `property_id` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `propAmenities` (`amenity_id`,`property_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

我将为单个 property_id 存储多个便利设施 id,这是我存储的值的示例。

在此处输入图像描述

但是,这在插入时工作得很好,但在更新时却是一个真正的问题,例如,如果我有要删除并添加更多 amenity_id,我必须执行两次数据库操作,首先删除该值,然后添加新值。

为了让它感觉更好,我想到使用 serialize()json_encode() 将 amenity_id 数组存储在数据库中。这样我可以减少列数,即每个 property_id 为一列。

使用 serialize() 后的数据库列 在此处输入图像描述

您认为哪种解决方案更适合这里的情况?

谢谢

i have a database table prop_amenities which have following columns

enter image description here

here is the create table i am using for the above table

CREATE TABLE `prop_amenities` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `amenity_id` int(11) NOT NULL,
  `property_id` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `propAmenities` (`amenity_id`,`property_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

i will be storing multiple amenity id's for a single property_id, here is the example of the values i have stored.

enter image description here

however this works just fine while inserting, but while updating it is a real problem, if for example i have to delete and add more amenity_id i have to perform two database trip first delete the value and then add the new one.

to make it feel nicer i thought of using serialize() or json_encode() to store the array of amenity_id in database. this way i could reduce the number of column i.e it will be one column per property_id.

Database column after using serialize() enter image description here

What do you think which solution better fits the situation here?

Thank you

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

白芷 2024-11-26 13:08:14

您需要问自己是否需要在查询中关心选择哪些内容。如果答案是绝对“否”,那么序列化是可以接受的。否则,请坚持使用正确标准化的形式。

You need to ask yourself if you will ever need to care in a query which ones are selected. If the answer is an absolute "no" then serialization is acceptable. Otherwise, stick to the properly-normalized form.

滥情稳全场 2024-11-26 13:08:14

如果您没有超过 64 个可能的便利设施,则 SET 数据类型 可以很好地在单个列中包含特定属性的所有设施,同时比序列化值更容易查询。

If you do not have more than 64 possible amenities, the SET datatype would work nicely to contain all the amenities for a particular property in a single column, while being much easier to query than a serialized value would be.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文