我希望有人能够就我创建的数据库模式和我用来查询数据库的 SELECT 语句提供一些建议。
我正在尝试创建一个包含 1800 年代非常古老的报纸文章的数据库,存储诸如文章的日期、标题和全文、文章图像、文章来源报纸名称等内容,文章中提到的地点名称和文章中提到的个人。
下面基本上是我创建的当前结构,其中 tbArticle 是主表焦点(“test”是数据库的名称)。我已经将报纸的名称、图像信息、位置信息和个人规范化到他们自己的表中,因为假设会有很多文章给很多人,我在 tbArticle & 之间添加了一个链接表 (lktbArticleIndividuals) tb个人;
创建数据库的原因显然是为了使一组集中的报纸文章可搜索并以逻辑格式存储它们。
我的问题是...
我想要做的就是显示数据库中所有文章的列表,显然包括来自 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/