2010-08-19 70 views
1

使用像StackOverflow这样的网站作为示例:MySQL记录存在优化

我有一个用户,问题和用户问题映射表。我的用户的问题的映射表看起来像这样:

userID (int 8) 
questionID (int 8) 

当显示的受欢迎的问题的清单,我想,以纪念已被登录的用户提出的问题。 检查每个问题是否存在用户问题映射,或者从数据库中获取登录用户的所有用户问题映射,并检查服务器端是否更高效?

这是我希望看到的输出的直观例子:

问题1:什么? (你问这个)
问题2:谁?
问题3:为什么? (你问了这个)

+0

究竟是什么问题? – Sarfraz 2010-08-19 00:15:12

+0

我编辑过,以确切的问题。 – Chetan 2010-08-19 00:17:22

回答

3

该演示文稿应该始终留给表示层。

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.

+0

加一个,因为这是一个好主意。然后,如果用户提问映射位于不同的表中,则这是一个完全不同的故事。 – 2010-08-19 00:26:04

+0

@Michael Clerx:呃,如果是这样的话,就是JOIN。 – 2010-08-19 00:27:27

+0

感谢您的回答!但是,用户问题映射位于不同的表中,那么我该怎么做呢? – Chetan 2010-08-19 00:32:22