一个项目表,点开每一个项目里的字段都不一样。请教下怎么实现。

2018-09-17 14:02:24 +08:00
 jd186

首先是一个项目记录表。 每一个点开的项目表字段都不一样 每一个项目点开后的记录都有上千条。 每一个项目点开后的表头字段也都不一样有的 3,4 列字段,有的 10 几列字段

请教下怎么实现比较好。

2792 次点击
所在节点    PHP
13 条回复
RihcardLu
2018-09-17 14:06:58 +08:00
专门建一个表存字段,值存在另一张表里
opengps
2018-09-17 14:11:13 +08:00
这时候似乎很适合 mongo 数据库的 json 存储
ben1024
2018-09-17 14:13:46 +08:00
外层进行规范格式,内层一个大 JSON 存储
breezeFP
2018-09-17 14:29:43 +08:00
我现在在做的一个功能和你的需求很像,字段列不固定,用 mongo 存储
saulshao
2018-09-17 15:44:23 +08:00
抽出来一个表,只建立比较少的字段,例如项目 ID,名称,编号。
其他的字段则建立一个纵向表,用 N-V 对来存储数据。
AngryPanda
2018-09-17 15:47:07 +08:00
shaojz2005
2018-09-17 15:53:32 +08:00
如果每个项目的字段差异性非常大,可以散列存储,每个项目都可以自定义字段,不把字段做成固定的表。

如果所有项目的字段总量是基本稳定的,只是每个项目都有选择性的填一些,那么可以全部定义出来,然后项目选填,前端页面渲染时,有内容就展示,无内容则隐藏。
DavidNineRoc
2018-09-17 15:56:02 +08:00
正好最近在做一个类似的功能:
fields 表,存列表锁展示的字段
id name table_name field_name
1 主键 users id
2 名字 users username
3 年龄 users age
4 主键 orders id
5 订单号 orders number
6 总价 orders total

users 表
id username age
1 david 12
2 loc 21


orders 表
id number total
1 12 11.4
2 4 58


## 现在在用户列表页面
$fields = Field::where('table_name', 'users')->get();
$users = User::latest()->get();

// 显示列表
foreach ($users as $user) {
foreach ($fields as $field) {
echo $user->{$field}
}
echo '<br>';
}


## 订单列表
$fields = Field::where('table_name', 'orders')->get();
$orders= Order::latest()->get();

// 显示列表
foreach ($ordersas $order) {
foreach ($fields as $field) {
echo $order->{$field}
}
echo '<br>';
}


####
其实更建议使用 数据表格 控件,把字段和数据分别赋值到数据表格,他会自动展示 ,不需要你遍历。
####
还可以做成显示那个字段,当用户点了隐藏不看某个字段之类的。
bsg1992
2018-09-17 17:18:03 +08:00
看你用上面数据库来持久化数据了。关系型数据库就是把共同的字段抽取出来单独一张表。然后剩余的属性建立一个 Key Value 的表,与其关联即可。
或者使用文档型数据库直接存储 json 文档到时直接取出即可。
winglight2016
2018-09-17 19:46:54 +08:00
看起来 postgresql 比较适合你,同时支持关系数据库和 json 格式字段,不过,具体还是要分析一下为什么不同项目之间字段差异很大?
wizardforcel
2018-09-17 22:22:14 +08:00
一个项目存成多条,(项目 id,字段名,值)
xuanbg
2018-09-17 22:24:26 +08:00
mysql 从 5.6 开始支持 JSON 类型,或者 MongoDB 了解一下
NEETLEE
2018-09-18 09:19:47 +08:00
我遇到这种情况都是把他们个性的字段打包成一个 json 然后把 json 存进某个字段里面,这样表结构就可以固定下来了,不好的地方就是,每次要用到的时候都要把 json 解析成对象

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/490060

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX