jd186
V2EX  ›  PHP

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

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

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

    请教下怎么实现比较好。

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

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