V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Geel
V2EX  ›  程序员

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

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

    虽然已经自己摸索开发了好多类似日志查询页面这种需要大量将账户显示为姓名的需求,但总感觉不是最优解,问题措辞还在百度搜不到,只能到 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 的开销
    infun
        9
    infun  
       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   ·   实用小工具   ·   1048 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 19:52 · PVG 03:52 · LAX 11:52 · JFK 14:52
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.