代码之家  ›  专栏  ›  技术社区  ›  Chetan

MySQL记录存在性优化

  •  1
  • Chetan  · 技术社区  · 14 年前

    我有一个包含用户、问题和用户问题映射的表。我的用户问题映射表如下所示:

    userID (int 8)
    questionID (int 8)
    

    在显示热门问题列表时,我试图标记已登录用户提出的问题。 检查每个问题是否存在用户问题映射,或者一次从数据库中获取登录用户的所有用户问题映射,然后在服务器端进行检查,这样效率更高吗?

    问题1:什么?(你问这个)
    问题二:谁?

    1 回复  |  直到 14 年前
        1
  •  3
  •   OMG Ponies    14 年前

    表示应该始终留给表示层。如果在数据库中构建,则基于您提到的业务规则的表示逻辑会更快:

    SELECT q.title,
           CASE 
             WHEN uq.who_asked = @user_id THEN 1 
             ELSE 0 
           END AS isYourQuestion
      FROM QUESTIONS q
      JOIN USER_QUESTIONS uq ON uq.question_id = q.question_id
    

    然后,你可以使用 isYourQuestion 如果值为1,则标记应用程序以显示“(您询问了此问题)”。