php - MYSQL数据库设计/SELECT语句协助

标签 php mysql database

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

我正在尝试创建一个包含 1800 年代非常古老的报纸文章的数据库,存储诸如文章的日期、标题和全文、文章图像、文章来源报纸名称等内容,文章中提到的地点名称和文章中提到的个人。

下面基本上是我创建的当前结构,其中 tbArticle 是主表焦点(“test”是数据库的名称)。我已经将报纸的名称、图像信息、位置信息和个人规范化到他们自己的表中,因为假设会有很多文章给很多人,我在 tbArticle & 之间添加了一个链接表 (lktbArticleIndividuals) tb个人;

enter image description here

创建数据库的原因显然是为了使一组集中的报纸文章可搜索并以逻辑格式存储它们。

我的问题是...

我想要做的就是显示数据库中所有文章的列表,显然包括来自 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 将每篇文章限制为每篇文章一行。

关于php - MYSQL数据库设计/SELECT语句协助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28773041/

相关文章:

php - 如何在php中获取点击进入下一页的数据?

mysql - 用于实现灵活的动态数据存储的最佳关系数据库模式是什么?

mysql - 如何使用 SQLAlchemy 向 mysql 中的表或列添加注释?

php - 如何将当前文本替换/转换为所需的形式?

php - 删除从数据库收到的重复列表项

javascript - 如何在提交表单时使用 wp_enqueue_script() 添加本地脚本?

php - 修改 DateTime on Month 短名称格式的日期字符串

php - 如何读取此 xml,获取 "parser error : CData section not finished"

mysql - 我可以将查询指定为字段的默认值吗?

php - InnoDB异常关闭时会崩溃吗