跟进问题来自: Adding sum from 2 different tables
我创建了3个表:
members
videos
video_member
第三个用于链接'前两个表,因为一个成员可以属于许多视频,一个视频可能有很多成员。
我过去只在视频表中有一个members
列,我会把成员放在那里:
video_id | members
1 | Tom,Dan
2 | Casey,Zack,Bob
3 | Tom,Casey,Dan,Zack
4 | Zack,Bob,Dan
在我的PHP项目中,我将查询视频表中的数据,并使用Twig模板引擎,我将使用for循环遍历每一行并创建一个类似于页面的图库。每个框都是'带有缩略图,下面是视频表中的数据。
我需要单独显示成员,以便每个成员都有自己的链接。所以我会用逗号分割字符串。 (例如:凯西,扎克,鲍勃)进入一个阵列然后只是循环通过它。
在我发布的图片中使用我的新格式,我将如何展示会员?
我做了什么: 这就是我在video.php中的内容。
$sql = 'SELECT * FROM videos';
$sql2 = 'select v.video_id "v_id", m.name "name" from videos v, video_member b, members m where b.video_id = v.video_id and b.member_id = m.member_id';
$result = $mysqli->query($sql);
$result2 = $mysqli->query($sql2);
echo $twig->render('video.html', array('videos'=> $result, 'members' => $result2));
然后我使用第一个结果从我的videos.html中的视频表输出数据
{% for v in videos %}
*html layout*
{% endfor %}
因为我有一个for循环遍历视频中的每一行,所以我在循环中添加了这个
{% for m in members %}
{% if v.video_id == m.v_id %} <a href='{{memberurl}}/{{m.name}}/'>{{m.name}}</a>
{% endif %}
{% endfor %}
所以这个想法是:每次从videos
遍历一行时,它会检查用我的$ sql2创建的新表中的video_id
和v_id(fk)
,如果有的话匹配它会显示这些名称。
现在它以这种方式工作,我现在只需要实现逗号但是......
我主要学习创建和使用规范化数据,并想知道我是否在正确的道路上,因为我想用标签和未来的项目实现这一点。这是展示会员的正确/精细方式吗?
我对很多这方面都很陌生,每次我学到新东西感觉都很棒,感谢您的帮助!
答案 0 :(得分:0)
在大多数情况下,您在单个查询中返回所需的所有数据,并将其放在页面上。
例如,您可以像这样运行单个查询:$sql2 = 'select * from videos v, video_member b, members m where b.video_id = v.video_id and b.member_id = m.member_id';
然后在您的前端代码中包含逻辑,当videoID更改为绘制您的下一个视频框时。
您正在做的是加入模板中的两个数据集;这是低效的,特别是如果你有复杂的查询,或者你有一个过滤器(例如像“Ferris%”这样的“videoName”)。