jd186
V2EX  ›  PHP

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

  •  
  •   jd186 · Sep 17, 2018 · 3673 views
    This topic created in 2972 days ago, the information mentioned may be changed or developed.

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

    请教下怎么实现比较好。

    13 replies  •  2018-09-18 09:19:47 +08:00
    kechx
    kechx
    Sep 17, 2018 via iPhone
    1
    专门建一个表存字段,值存在另一张表里
    opengps
    opengps
    Sep 17, 2018
    2
    这时候似乎很适合 mongo 数据库的 json 存储
    ben1024
    ben1024
    Sep 17, 2018
    3
    外层进行规范格式,内层一个大 JSON 存储
    breezeFP
    breezeFP
    Sep 17, 2018
    4
    我现在在做的一个功能和你的需求很像,字段列不固定,用 mongo 存储
    saulshao
    saulshao
    Sep 17, 2018
    5
    抽出来一个表,只建立比较少的字段,例如项目 ID,名称,编号。
    其他的字段则建立一个纵向表,用 N-V 对来存储数据。
    shaojz2005
    shaojz2005
    Sep 17, 2018
    7
    如果每个项目的字段差异性非常大,可以散列存储,每个项目都可以自定义字段,不把字段做成固定的表。

    如果所有项目的字段总量是基本稳定的,只是每个项目都有选择性的填一些,那么可以全部定义出来,然后项目选填,前端页面渲染时,有内容就展示,无内容则隐藏。
    DavidNineRoc
    DavidNineRoc
    Sep 17, 2018
    8
    正好最近在做一个类似的功能:
    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
    bsg1992
    Sep 17, 2018
    9
    看你用上面数据库来持久化数据了。关系型数据库就是把共同的字段抽取出来单独一张表。然后剩余的属性建立一个 Key Value 的表,与其关联即可。
    或者使用文档型数据库直接存储 json 文档到时直接取出即可。
    winglight2016
    winglight2016
    Sep 17, 2018
    10
    看起来 postgresql 比较适合你,同时支持关系数据库和 json 格式字段,不过,具体还是要分析一下为什么不同项目之间字段差异很大?
    wizardforcel
    wizardforcel
    Sep 17, 2018 via Android
    11
    一个项目存成多条,(项目 id,字段名,值)
    xuanbg
    xuanbg
    Sep 17, 2018
    12
    mysql 从 5.6 开始支持 JSON 类型,或者 MongoDB 了解一下
    NEETLEE
    NEETLEE
    Sep 18, 2018
    13
    我遇到这种情况都是把他们个性的字段打包成一个 json 然后把 json 存进某个字段里面,这样表结构就可以固定下来了,不好的地方就是,每次要用到的时候都要把 json 解析成对象
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1709 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 45ms · UTC 15:58 · PVG 23:58 · LAX 07:58 · JFK 10:58
    ♥ Do have faith in what you're doing.