2013-08-06 125 views
0

因此,我正在使用数据库中的几个表,并且想知道查询它的最佳方法。MYSQL查询 - 加入或循环查询

这里的设置:

EVENTS: 
int event_id 
varchar event_name 
date event_date 

ATTENDANCE: 
int attendance_id 
int event_id (foreign key for EVENTS) 
int user_id (foreign key for USERS) 
int status 

USERS: 
int user_id 
varchar first_name 
varchar last_name 
varchar email 

差不多就是我要做的事情,就是有一个我想要得到出席一个事件(ID#),然后查询考勤表的所有记录与该事件相匹配的记录,然后查询参与参考的所有用户的用户表作为该事件的一部分。

首先想到的是首先查询数据库中所有出席条目并获取数组,然后遍历每条记录以查询用户信息。然而这看起来效率很低,并且必须有更好的方式来加入或者类似的东西。我没有太多的加入经验,所以我想知道我能否得到一些帮助。

这是什么,我本来想的伪代码:

SELECT * FROM attendance WHERE event_id = eventID 
while (row exists): 
    SELECT FROM users WHERE user_id = attendanceUserID 
    get info export in xml...etc. 

我不认为这是要做到这一点的最好办法,所以这将是更好的方式来做到这一点?

+0

很好的学习机会加入;他们起初可能会感到害怕,但你很快就会变得自然。 [从这里开始](http://www.w3schools.com/sql/sql_join_inner.asp) –

+0

所以你认为连接是最好的方式去做这件事? – phouse512

+0

这就是加入。尝试'选择 e.event_name,e.event_date, u.first_name,u.last_name,u.email 从事件Ë INNER JOIN上座率ON a.event_id = e.event_id INNER JOIN用户U ON u.user_id = a.user_id'我只是把它键入我的头顶,这应该给你一个方向去看看 –

回答

0

问题是“连接还是循环?”技术答案是使用连接。你所描述的是连接意味着要做什么,在条件上组合表。

“select ... from ...(select more)”并不是解决问题的方法。考虑这个想法真的是“这两张桌子有什么能够以完全可靠和可识别的方式将他们连接起来?”上述评论中的注释是现货。

然而,作为一个“老人”,问题是“所有问题都是时间,你和机器的问题,所以问问你自己:想象方法A比方法B的效率高100倍,但是,你已经知道如何去做方法B.差异是0.02毫秒与2毫秒(假设你有一个小的数据集和一个快速的机器)。如果你能在三分钟内完成方法B的编码,并继续你的项目,那可能是好的。一个最后期限,因为即使以不同的方式实施,所有事情都可以通过一个可行的例子来简化,它给了你一些东西来测试你刚学习的新方法。在他们甚至知道这件事是否重要之前,他们会追求效率。

让事情工作第一,让他们更快第二。 (当然,不要把自己描绘成一个可怕的设计角落,虽然没有,但数据库没有问题,你只是想通过不同的方式获取信息。)