我正在开发一个小型在线系统来对我的书籍进行分类,但是现在我已经尝试了几个小时来解决一个问题,但没有任何运气。
在我的数据库中,我有一个titles
包含书籍信息(title_id
、、title
... author
)的表和另一个包含title_relations
字段title_relation_id
、、title_id
和。to_title_id
titlerelation
当我调用一本书的信息时,有一个字段related titles
应该列出所有前传、续集和衍生产品。
数据库如下所示:
标题
标题 ID 1 指环王:魔戒联谊会 ... 标题 ID 2 标题指环王:两座塔楼 ... 标题 ID 3 指环王:王者归来 ...
标题关系
title_relation_id 1 标题 ID 1 to_title_id 2 标题关系前传 title_relation_id 1 标题 ID 1 to_title_id 3 标题关系前传
现在我正在调用“魔戒联谊会”的信息,并希望显示“两座塔楼”和“王者归来”的链接。我该如何去那里获取这些信息?
我让它适用于一个标题关系,但除此之外,我还需要一个
foreach($title_relations as $row) {
}
它将来自 title_relations 的信息保存到变量 ( $to_title_id_1
, $titlerelation_1
, $to_title_id_2
, $titlerelation_2
, ...)、数组或其他类似的东西中。
我尝试过的任何事情都没有奏效,因此我们将非常感谢您提供的任何帮助。
我正在使用 PDO 来获取数据库信息。
旧代码(不工作):
try {
$dbh = new PDO("mysql:host=$host;dbname=$dbname", $user, $pass);
$dbh->exec("SET CHARACTER SET utf8");
if($page == 'title'){
#titles zuordnen
$titles = $dbh->prepare("SELECT * FROM titles WHERE title_id = $id");
$titles->execute();
while($row = $titles->fetch(PDO::FETCH_OBJ)) {
$title = $row->title;
/* deleted the other infos */
}
#title_relations zuordnen
$title_relations = $dbh->prepare("SELECT * FROM title_relations WHERE title_id = $id");
$title_relations->execute();
while($row = $title_relations->fetch(PDO::FETCH_OBJ)) {
$to_title = $row->to_title_id;
$relation_type = $row->titlerelation;
}
#to_title Seriennamen zuordnen
$series_name = $dbh->prepare("SELECT * FROM titles WHERE title_id = $to_title");
$series_name->execute();
while($row = $series_name->fetch(PDO::FETCH_OBJ)) {
$series = $row->title;
}
}
#Datenbank schließen
$dbh = null; } catch(PDOException $exceptionpdo){
echo 'ERROR: ' . $exceptionpdo->getMessage(); }
当前代码(工作!):
try {
$dbh = new PDO("mysql:host=$host;dbname=$dbname", $user, $pass);
$dbh->exec("SET CHARACTER SET utf8");
if($page == 'title'){
// titles zuordnen
// Here I binded the $id in execute, not in prepare
$titles = $dbh->prepare("SELECT title FROM titles WHERE title_id = ?");
$titles->bindParam(1, $id, PDO::PARAM_INT);
$titles->execute();
// Here you are expecting a single row, I guess title_id is a primary key, so you don't needa loop
$row = $titles->fetch(PDO::FETCH_OBJ);
$title = $row->title;
// title_relations zuordnen
$title_relations = $dbh->prepare("SELECT title_relation_id, title_id, to_title_id, titlerelation FROM title_relations WHERE title_id = ?");
$title_relations->bindParam(1, $id, PDO::PARAM_INT);
$title_relations->execute();
$series = array(); // In this array we will store all the related titles
while($row = $title_relations->fetch(PDO::FETCH_OBJ)) {
// zu_title Serieninfo zuordnen
$series_info = $dbh->prepare("SELECT title_id, title FROM titles WHERE title_id = ?");
$series_info->bindParam(1, $row->to_title_id, PDO::PARAM_INT);
$series_info->execute();
while($row = $series_info->fetch(PDO::FETCH_OBJ)) {
$series[] = $row;
}
}
#Datenbank schließen
$dbh = null;
}
} catch(PDOException $exceptionpdo){
echo 'ERROR: ' . $exceptionpdo->getMessage();
}