[英]From two tables show all rows with JOIN
I have two tables news
and video
我有两张桌子news
和video
news
id ID | title标题 |
---|---|
1 1 | Some title一些标题 |
2 2 | Some title 2一些标题2 |
video
new_id new_id | video_name视频名称 | uploaded_on上传_on | video_signature视频签名 |
---|---|---|---|
1 1 | Video name视频名称 | date日期 | signature签名 |
2 2 | Video name 2影片名称 2 | date日期 | signature签名 |
$stmt = $con->prepare('SELECT n.id, v.video_name, v.uploaded_on, v.video_signature FROM news AS n INNER JOIN video AS v ON n.id = v.new_id');
$stmt->execute();
$stmt->bind_result($id, $video_name, $uploaded_on, $video_signature);
while ($stmt->fetch()) {
$videos[] = ['id' => $id, 'video_name' => $video_name, 'uploaded_on' => $uploaded_on, 'video_signature' => $video_signature];
$video[$id][] = $video_name;
}
I can show video_name
with foreach
loop but don't know how to print video_signature
and uploaded_on
with same foreach
我可以使用foreach
循环显示video_name
但不知道如何使用相同的foreach
打印video_signature
和uploaded_on
<?php
foreach ($news as $new) {
foreach ($video[$new['id']] as $v) {
?>
<div class="col-md-4">
<div class="card">
<div class="card-image">
<div class="overflow-hidden w-100">
<div class="player-wrapper overflow-hidden">
<video class="player-html" controls crossorigin="anonymous">
<source src="./uploads/<?= $v ?>" type="video/mp4">
</video>
</div>
</div>
</div>
<div class="card-body px-0 pt-3">
<h5 class="card-title"><a href="new.php?id=<?= $new['id'] ?>" class="btn-link text-reset fw-bold"><?= $new['title'] ?></a></h5>
<!-- Card info -->
<ul class="nav nav-divider align-items-center d-none d-sm-inline-block">
<?= date_format(date_create($videos['uploaded_on']), "d/m/Y H:i") ?>
<?= $videos['video_signature']; ?>
</ul>
</div>
</div>
</div>
<?php
}
}
?>
This code show me only last date
and last video_signature
此代码仅显示最后一个date
和最后一个video_signature
I think you are headed in the right direction.我认为你正朝着正确的方向前进。
Assuming this data is in your database:假设此数据在您的数据库中:
news
id | title
100 | Dinosaurs of the day
101 | Titanic exhibit opens
102 | Local soccer league registration
video
new_id | video_name | uploaded_on | video_signature
100 | v25 | 2022-08-01 | blah111
100 | v26 | 2022-08-02 | blah112
102 | v27 | 2022-08-03 | blah113
102 | v28 | 2022-08-04 | blah114
102 | v29 | 2022-08-05 | blah115
This is the data you will get back:这是您将获得的数据:
id | video_name | uploaded_on | video_signature
100 | v25 | 2022-08-01 | blah111
100 | v26 | 2022-08-02 | blah112
102 | v27 | 2022-08-03 | blah113
102 | v28 | 2022-08-04 | blah114
102 | v29 | 2022-08-05 | blah115
Therefore, you cannot use nested for loops to process this.因此,您不能使用嵌套的 for 循环来处理它。
$stmt = $con->prepare('SELECT n.id, v.video_name, v.uploaded_on, v.video_signature FROM news AS n INNER JOIN video AS v ON n.id = v.new_id');
$stmt->execute();
$stmt->bind_result($id, $video_name, $uploaded_on, $video_signature);
while ($stmt->fetch()) {
$videos[] = ['id' => $id, 'video_name' => $video_name, 'uploaded_on' => $uploaded_on, 'video_signature' => $video_signature];
}
// HTML intentionally not included. I assume you can add it.
foreach ( $videos as $video ) {
echo $video['id']; // news id
echo $video['video_name']; //
echo $video['video_signature'];
echo $video['uploaded_on'];
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.