• 请不要在回答技术问题时复制粘贴 AI 生成的内容
Geel
V2EX  ›  程序员

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

  •  
  •   Geel · Mar 8, 2021 · 2573 views
    This topic created in 2069 days ago, the information mentioned may be changed or developed.

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

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

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

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

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

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

    15 replies  •  2021-03-08 10:22:05 +08:00
    canghai666
    canghai666
    Mar 8, 2021
    1
    数据量不多就一次性提取出来,然后循环输出就是了,1000 次读取数据库是很慢的
    jinhan13789991
    jinhan13789991
    Mar 8, 2021 via Android
    2
    我觉得可以考虑 nosql,对 uid 和 name 做单独映射。
    Geel
    Geel
    OP
    Mar 8, 2021
    3
    @canghai666 感谢回答,会认真参考的。
    Geel
    Geel
    OP
    Mar 8, 2021
    4
    @jinhan13789991 感谢回答,现在主要在用 mysql,会考虑使用 nosql 这个方向的
    MasterCai
    MasterCai
    Mar 8, 2021
    5
    数据量不大的话还是直接全部读到内存里速度最快吧,完全可以预判一下在用户即将使用到这个数据的时候将其提前取出来
    Geel
    Geel
    OP
    Mar 8, 2021
    6
    @MasterCai 感谢回答,会认真参考的。
    chinvo
    chinvo
    Mar 8, 2021 via iPhone
    7
    有 uid 的话可以用 implode 拼(虽然底层实现还是循环)
    junwind
    junwind
    Mar 8, 2021
    8
    先 sql 把用户名的表直接取出来,然后在 foreach 里面用$user[$uid]映射取用户名就行了,这样绝对比在 foreach 里面循环执行 sql 查用户名好一些;大大的减轻了 mysql 的开销
    GlobalNPC
    GlobalNPC
    Mar 8, 2021 via Android
    9
    我前领导的写法是全取出,放浏览器缓存,而且每刷新一次就 append 一次,导致一个页面占用内存超过 1G,巨慢。
    junwind
    junwind
    Mar 8, 2021
    10
    @junwind 或者还可以优化一下,获取的用户信息中,uid 单独拿出来,看看有哪些 uid 需要获取用户名的,避免一次查所有的用户名造成浪费,select `username` from user where uid in (uid1,uid2,...) , 查出来后再循环取,可以的话,还能加个 redis 缓存,下一次取就更方便了,比较用户名这种数据,一般人也不会多次修改,做缓存很好;
    Geel
    Geel
    OP
    Mar 8, 2021
    11
    @infun [表情]
    Geel
    Geel
    OP
    Mar 8, 2021
    12
    @junwind 感谢回答,会认真参考的。
    dorothyREN
    dorothyREN
    Mar 8, 2021
    13
    我是把日志表里面加一个用户名的字段。
    Geel
    Geel
    OP
    Mar 8, 2021
    14
    @dorothyREN 感谢回答,会认真参考的。
    dorothyREN
    dorothyREN
    Mar 8, 2021
    15
    @Geel #14 加一个字段,好处是查询的时候不用连表查询了。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2611 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 00:29 · PVG 08:29 · LAX 16:29 · JFK 19:29
    ♥ Do have faith in what you're doing.