【问题标题】:How to add columnName and its value dynamically into MYSQL Table如何将 columnName 及其值动态添加到 MYSQL 表中
【发布时间】:2018-09-06 09:24:30
【问题描述】:

我有一个主表,例如 Fruits_Details(Master Table),其中包含列名:
f_name | f_price |位置
我想向用户展示一个包含上述字段但还包含一个额外的“+”号的表单,他可以从中添加新的详细信息作为键、值对。

例如:
fruit_color - 红色
水果季节 - 春天
还有更多这样的细节。我希望这两个细节应该存储在不同的表中(子表-我将实现外键概念)。
但是我很困惑如何设计一个查询,该查询将在我的子表中动态添加列名及其相关值。

【问题讨论】:

  • 为了它的价值,WordPress 在他们的 wp_postmeta 表中实现了这种键/值方法,用于为帖子分配属性。您可以以他们的设计为例。挺好的。

标签: mysql sql jdbc


【解决方案1】:

子表应该有一个属性名称和值,必须没有什么动态的。

child table
-----------
fruit_id
attribute_name
attribute_value


insert into child (fruit_id, attribute_name, attribute_value)
values (1, 'color', 'red')

【讨论】:

  • 但我想要这样的东西:插入孩子(fruit_id,fruit_color,fruit_location,....)值(1,'color','India')。但是这些列名应该是动态的,我的意思是如果下一个用户想要添加fruit_season 列及其值。它也应该附加到子表中。
  • 别这样。绝对不推荐使用动态结构
【解决方案2】:

由于潜力无穷无尽,不要按列,而是按行... 您将能够以一种方式提取信息,并以另一种方式显示它。

名为 fruits_attributes 的表将包含以下列: attribute_id、f_id(外键)、attribute_name、attribute_value

CREATE TABLE `fruits_attributes` (
  `attribure_id` int(8) unsigned NOT NULL AUTO_INCREMENT,
  `f_id` mediumint(8) unsigned NOT NULL,
  `attribure_name` varchar(50) NOT NULL,
  `attribure_value` varchar(50) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `f_id` (`offer_id`),
  KEY `attribure_name` (`attribure_name`),
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8
;

那么 SELECT 查询应该是这样的

SELECT f.*, fa.* FROM
Fruits_Details f
LEFT JOIN fruits_attributes fa ON fa.id = f_id

【讨论】:

  • 但是如果我想添加 3 个属性而不是如何执行它。
  • 任何时候你添加一个属性,JOIN 都会添加它。只要属性属于原主桌水果,当然可以
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-22
  • 2021-06-15
  • 2020-04-28
  • 2011-09-09
  • 2019-04-02
  • 2011-03-01
相关资源
最近更新 更多