繁体   English   中英

MYSQL数据库设计/ SELECT语句帮助

[英]MYSQL Database Design/SELECT Statement assistance

我希望有人能够就我创建的数据库模式以及用于查询数据库的SELECT语句提供一些建议。

我正在尝试创建一个1800年代非常旧的报纸文章的数据库,存储诸如日期,文章的标题和全文,文章的图像,文章的报纸名称,位置的名称等信息文章中提到的内容以及文章中提到的个人。

基本上,下面是我用tbArticle创建的当前结构,将其作为主要的表焦点(“ test”是数据库的名称)。 我已经将报纸的名称,图像信息,位置信息和个人信息归一化到了自己的表格中,并且由于假定会有很多文章投向许多个人,因此我在tbArticle和tbIndividual;

在此处输入图片说明

创建数据库的原因显然是要使一组重点突出的报纸文章可搜索并以逻辑格式存储它们。

我的问题是...

我要做的就是显示数据库中所有文章的列表,显然包括tbArticle以外的其他表中的数据,为此,我正在使用SELECT查询;

SELECT *
  FROM tbArticle a
     , tbLocation l
     , tbNewspapers n
     , tbIndividual i
     , lktbArticleIndividuals ai
     , tbImage m
 WHERE a.idLocation = l.idLocation 
   and a.idNewspaper = n.idNewspaper 
   and a.idArticle = ai.idArticle 
   and ai.idIndividual = i.idIndividual 
   and a.idImage = m.idImage;

我要做什么...除了...如果某文章中列出了一个以上的个人,则返回整个文章的两个(或多个)实例,唯一的区别是显示的是不同个人的名字。

如果可能的话,我只想列出每篇文章,但要遍历两个或多个个人以包括它们。 能做到吗?

如果我要用PHP查询数据库,我怀疑我可能要做的是在一个循环中进行某种循环以实现所需的结果,但是这对我来说似乎不是很有效!

这对任何人有意义吗?

代替SELECT * ,您可以命名感兴趣的列,对于诸如个人之类的事物,可以使用GROUP_CONCAT()将它们全部添加到一个字段中,然后在查询结束时,使用GROUP BY a.idArticle来将每篇文章限制为一行。

假设您只希望每个人的名字都可以与GROUP_CONCAT一起使用group by。

SELECT *,
       GROUP_CONCAT(i.firstname)
  FROM tbArticle a
     , tbLocation l
     , tbNewspapers n
     , tbIndividual i
     , lktbArticleIndividuals ai
     , tbImage m
 WHERE a.idLocation = l.idLocation 
   and a.idNewspaper = n.idNewspaper 
   and a.idArticle = ai.idArticle 
   and ai.idIndividual = i.idIndividual 
   and a.idImage = m.idImage;
GROUP BY a.idArticle

但是,如果您想获得每个个体的许多详细信息,我鼓励您做两个单独的查询:一个用于文章,另一个用于获取每个文章的个体。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM