好吧,我一直在尝试解决这个问题,但一直无法得出结论。我很乐意从你们那里得到一些结果、进行更多测试的提示或更多可供阅读的资源。
情况很简单。有一个主要的图片表。可能是cat_pictures
。还有一个 cat_pictures_comments
辅助表。一些聪明的开发人员确保cat_pictures
具有自动递增的主键ID_PICTURE
,并且注释也使用ID_PICTURE
的索引存储。
我们的应用程序有一个页面想要显示所有图片以及每张图片的所有评论。
我们可以吗
只需
INNER JOIN
cat_pictures
和cat_pictures_comments
(并确保内容顺序正确)获取所有
cat_pictures
,然后循环遍历每个图片并获取每张图片的cat_pictures_comments
答:如果应用程序是 PHP 怎么办?
B:如果 cat_pictures
具有条目 ID、图片文件路径以及猫基因组的另外 20,285 个字段会怎么样? cat_pictures
还与每只猫主人的精神科医生进行了INNER JOIN
(1-1 关系)。 (基本上,与我们的小评论表相比,主表附加了更多的数据。)
谢谢大家。
最佳答案
我认为你的问题是,你是否加入回评论,然后有一个看起来像这样的查询
选项1
select (all pic columns), (all comment columns) from pics inner join comments;
对比。选项2
Select * from pics; then loop and select * from comments were pictureId = @currentId;
对比。选项3
Select * from pics order by picId; select * from comments order by picId;
在选项 1 中,对于针对该图片发布的每条评论,图片表的每一列都会重复。如果每张图片都有很多评论并且图片表很宽,那么您可能最好从数据库中提取两个单独的数据集。
在选项 2 中,如果有很多图片,您将需要多次往返数据库。
基于缺乏完整的要求,我会推荐选项3。将图片表结果和评论作为两个单独的数据集获取,然后在您的php页面中:循环遍历每个图片并显示图片信息,然后嵌套循环以获取当前图片的评论来自已从 SQL Server 提取的本地评论数据集。
关于php - MySQL 一对一关系优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21347099/