关于MySQL中的联接语句(或其他有效方法)的问题


Issue Regarding Join Statements (Or Other Efficient Method) in MySQL

我花了一段时间才想出一个标题,因为我不知道该给它起什么标题。基本上,我的问题是处理SQL queries,并想出一个有效的方法来完成我要做的事情。

举个例子,假设我们有两个表:

Table 1 (Articles): ID | ArticleName | AuthorID
Table 2 (Users):    ID | AuthorName

我想做的是拉动,比如说最后5篇文章。从这里开始,对于它提取的每一篇文章,它都有一个while循环来查询第二个表以提取AuthorName where ID=AuthorID

本质上,我们有一个针对这5篇文章的查询,然后还有一个五个查询来获取作者姓名。在有10-20篇或更多文章的页面上,这会进一步加剧,其中会有10-20多个查询。

有没有更有效的方法将这些语句连接在一起,并让它为它提取的每个文章提取AuthorName?

在表1中使用AuthorID的原因是,如果用户名被更改,它不会破坏任何内容。除此之外,它(据我所知)还大大减少了数据库存储。

不过,我对SQL还是有点陌生,所以如果有任何关于如何解决这个问题的想法,我将不胜感激。

提前感谢,如果有任何问题,请随时询问!

SELECT * FROM `Articles` INNER JOIN `Users` ON `Articles`.`AuthorID`=`Users`.`ID`

有两种方法可以做到这一点。您可以执行一次性查询,JOIN位于附加作者表中,并显示完整的结果集,也可以执行两次查询,使用第一次查询中的不同标识符,使用SELECT ... FROM Authors WHERE ID IN (...)在后续调用中获取所有作者。

对于小列表和小表,JOIN方法几乎总是更方便。对于大的列表,两次通过的方法看起来"更笨",但在数据库中执行联接的性能往往会差一些。例如,如果文章数量很大,而作者数量很小,那么JOIN会为大型查询添加大量的工作,而这些工作可以通过事后进行小型二次查询来消除。

对于这种情况,如果记录少于一百万条,并且取数大小较小,请使用JOIN

相关文章: