[求助] 做日志查询页面如何用账号取数据库中的姓名? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
Geel
V2EX    程序员

[求助] 做日志查询页面如何用账号取数据库中的姓名?

  •  
  •   Geel 2021-03-08 07:50:43 +08:00 1842 次点击
    这是一个创建于 1689 天前的主题,其中的信息可能已经有所发展或是发生改变。

    虽然已经自己摸索开发了好多类似日志查询页面这种需要大量将账户显示为姓名的需求,但总感觉不是最优解,问题措辞还在百度搜不到,只能到 V2EX 求教了。

    以前用 PHP 写过三种方式,分别是:

    1.foreach 输出表格,每行执行一条 SQL,用 UID 查账户数据库,返回姓名并输出;

    2.foreach 循环前再做一个 foreach,将所有 UID 合并为一条 SQL,返回姓名数组,整理返回的每一条的 key 为 UID,后续调取$name["UID"];

    3.直接在 foreach 前用一条 SQL 搬出所有账户的姓名(企业内环境,数据量不超过 1000 条),整理返回的每一条的 key 为 UID,后续调取$name["UID"]。

    请问那种方法更好?或者有更好的方法?这类问题应该通过学习什么内容掌握?

    15 条回复    2021-03-08 10:22:05 +08:00
    canghai666
        1
    canghai666  
       2021-03-08 08:16:08 +08:00
    数据量不多就一次性提取出来,然后循环输出就是了,1000 次读取数据库是很慢的
    jinhan13789991
        2
    jinhan13789991  
       2021-03-08 08:22:08 +08:00 via Android
    我觉得可以考虑 nosql,对 uid 和 name 做单独映射。
    Geel
        3
    Geel  
    OP
       2021-03-08 08:22:57 +08:00
    @canghai666 感谢回答,会认真参考的。
    Geel
        4
    Geel  
    OP
       2021-03-08 08:24:14 +08:00
    @jinhan13789991 感谢回答,现在主要在用 mysql,会考虑使用 nosql 这个方向的
    MasterCai
        5
    MasterCai  
       2021-03-08 08:36:12 +08:00
    数据量不大的话还是直接全部读到内存里速度最快吧,完全可以预判一下在用户即将使用到这个数据的时候将其提前取出来
    Geel
        6
    Geel  
    OP
       2021-03-08 08:44:43 +08:00
    @MasterCai 感谢回答,会认真参考的。
    chinvo
        7
    chinvo  
       2021-03-08 08:51:53 +08:00 via iPhone
    有 uid 的话可以用 implode 拼(虽然底层实现还是循环)
    junwind
        8
    junwind  
       2021-03-08 08:57:28 +08:00
    先 sql 把用户名的表直接取出来,然后在 foreach 里面用$user[$uid]映射取用户名就行了,这样绝对比在 foreach 里面循环执行 sql 查用户名好一些;大大的减轻了 mysql 的开销
    GlobalNPC
        9
    GlobalNPC  
       2021-03-08 08:58:07 +08:00 via Android
    我前领导的写法是全取出,放浏览器缓存,而且每刷新一次就 append 一次,导致一个页面占用内存超过 1G,巨慢。
    junwind
        10
    junwind  
       2021-03-08 09:01:24 +08:00
    @junwind 或者还可以优化一下,获取的用户信息中,uid 单独拿出来,看看有哪些 uid 需要获取用户名的,避免一次查所有的用户名造成浪费,select `username` from user where uid in (uid1,uid2,...) , 查出来后再循环取,可以的话,还能加个 redis 缓存,下一次取就更方便了,比较用户名这种数据,一般人也不会多次修改,做缓存很好;
    Geel
        11
    Geel  
    OP
       2021-03-08 09:08:31 +08:00
    @infun [表情]
    Geel
        12
    Geel  
    OP
       2021-03-08 09:09:20 +08:00
    @junwind 感谢回答,会认真参考的。
    dorothyREN
        13
    dorothyREN  
       2021-03-08 10:12:55 +08:00
    我是把日志表里面加一个用户名的字段。
    Geel
        14
    Geel  
    OP
       2021-03-08 10:17:53 +08:00
    @dorothyREN 感谢回答,会认真参考的。
    dorothyREN
        15
    dorothyREN  
       2021-03-08 10:22:05 +08:00
    @Geel #14 加一个字段,好处是查询的时候不用连表查询了。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2865 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 13:59 PVG 21:59 LAX 06:59 JFK 09:59
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86