【发布时间】:2015-08-19 09:24:42
【问题描述】:
我想做的事
我正在创建一个 html 表单,我想在其中自动创建字段(例如 <input type="text">、<textarea>、<select>)。为此,我执行 MySQL 查询 "SHOW FIELDS from $table"。
a) 现在我想将REFERENCED_TABLE_SCHEMA、REFERENCED_TABLE_NAME、REFERENCED_COLUMN_NAME 从information_schema.KEY_COLUMN_USAGE 加入到FIELDS 表中。
b) 稍后我想查询引用表中每个外键的可能值,以提供一个 html <select>-menu,用户可以在其中选择一个预设。
问题
到 a) 我如何在 MySQL 中加入这两个?
到 a) 和 b) 我正在使用 2 个数据对象(一个用于 FIELDS 和 References,另一个用于引用值)。您认为这是一个好方法还是有更好的方法?
编辑
说明
字段和引用的 JSON
[
{
"Field": "id",
...
"Key": "PRI",
...
"foreign_db": "null",
"foreign_table": "null",
"foreign_column": "null"
},
{
"Field": "url",
...
"Key": "UNI",
...
"foreign_db": "null",
"foreign_table": "null",
"foreign_column": "null"
},
{
"Field": "sitemap__site_id",
...
"Key": "MUL",
...
"foreign_db": "my_db",
"foreign_table": "sitemap",
"foreign_column": "site_id"
}
]
参考列值的 JSON
[
{
"Field": "sitemap__site_id",
"Value": "index"
},
{
"Field": "sitemap__site_id",
"Value": "error"
},
{
"Field": "sitemap__site_id",
"Value": "about"
}
]
放在一起,我可以自动创建一个 html <form>,其中每个字段都是根据其字段 Type 创建的(例如,文本 <input> 字段用于 varchar(32) 或 <textarea> 用于varchar(512) 和 <select> 字段,因为引用了外键,我必须预设可能的条目。
@rlanvin 希望这能说明问题。
再说一遍:我怎样才能让第一个 JSON 对象加入 MySQL 中?或者一般来说:这个问题通常是如何解决的?
【问题讨论】:
-
我用 PHP 加入了
-
@Jens 到目前为止工作正常(使用 AJAX 动态),但它似乎不是最好的解决方案,因为我想让 MySQL 尽可能完成所有工作
-
我不知道您的第二个问题是什么(“2 个数据对象?”),但对于第一个问题,您应该能够使用 table_schema 和 table_name 作为键加入 information_schema.columns。避免用于真正的项目,但我怀疑它是否有效。
-
巨大的问题......如果没有大局,我无法说出我的方法会是什么,这超出了这个问题的范围。但是我可以制作两个 cmets:1)您的 JSON 结构过于冗长(例如,
{"sitemap__site_id":["index", "error", "about"]}会更容易使用)和 2)考虑在没有抽象的情况下暴露表的原始结构的风险(如果您想要一个非 FK 字段上的 -
我应该说“风险和限制”。但是是的,“风险”就像“安全风险”一样。我不知道你的架构或你的项目,所以也许这不适用,但我看到至少有两个风险:1)如果你的 JSON 对客户端可见(用于 JS 或其他),他可以获得非常详细的信息了解数据库的确切结构。虽然不能直接利用,但它可能会促进/加剧其他利用,因此您不想公开展示它 2) 不小心使字段可见和可编辑,这可能会产生严重的安全影响。
标签: mysql join reference foreign-keys field