【发布时间】:2017-01-13 16:48:46
【问题描述】:
数据库表:
电影(id_film PK,名称)
流派(id_genre PK,名称)
film_genre(id_film FK, id_genre FK)
这会输出流派表中的所有流派:
$genremenu = $veza -> prepare("select * from genre");
$genremenu -> execute();
$resultmenu = $genremenu -> fetchALL(PDO::FETCH_OBJ);
这会从特定电影的 film_genre 表中输出所有选定的流派:
$izraz = $veza -> prepare("select * from genre a inner join film_genre b on a.id_genre=b.id_genre where b.id_film=:id_film");
$izraz -> execute(array("id_film" => $film -> id_film));
$selectedgenre = $izraz -> fetchAll(PDO::FETCH_OBJ);
我在将数据从数据库输出到表单中的多个选定列表时遇到问题。这是一个电影数据库,我正在进行 foreach 迭代以读取所有电影类型行以输出到多个选择字段。但是我在将“选定”流派输出到该列表时遇到了麻烦。代码是
foreach ($resultmenu as $line) {
foreach ($selectedgenre as $sg) {
if ($line-> id_genre === $sg-> id_genre) {
echo "<option value=\"" . $line-> id_genre . "\" selected>" . $line-> name . "</option>";
} else {
echo "<option value=\"" . $line-> id_genre . "\">" . $line-> name . "</option>";
}
}
}
现在我知道我在选定列表中得到了重复的输出,因为例如,如果电影有 2 种类型,比如说喜剧和犯罪,这意味着对于每个 $line,他将迭代两次以检查 $selectedgenre,所以我得到如下输出:
- 喜剧
- 喜剧“入选”
- 犯罪
- 犯罪“选定”
- 恐怖
- 恐怖
- 等
我是 php 新手,所以我想问如何在没有重复条目的情况下获得正确的列表输出?我尝试使用刹车并继续但不工作,或者我没有正确使用它?请帮助并提供(如果可能)更多替代解决方案。谢谢!
【问题讨论】:
-
DISTINCT在您的 SQL 查询中将有助于对您的重复问题进行排序。至于选中的issue,var_dump($line->id_genre, $sg->id_genre);输出什么? -
检查这个 -
if ($line-> id_genre === $sg-> id_genre) -
我更新了我的问题,所以我认为 DISTINCT 无济于事,因为我没有从一个具有不同值的表中进行选择...@JonStirling 现在从 var_dump 输出的问题中更清楚了
-
谁能想到如何解决这个问题?请帮忙