以下二维数组存储书籍信息(1.ID,2.Name,3.Author ID,4.Author Name,5.Publisher ID,6。Publisher Name,7。Publisher Reputation):
$books = array(array('book_id'=>1, 'book_name'=>"BookA", 'author_id'=1,
'author_name'=>"AuthorA", 'publisher_id'=>1,
'publisher_name'=>"PublisherA", 'publisher_reputation'="good"),
array('book_id'=>1, 'book_name'=>"BookA", 'author_id'=1,
'author_name'=>"AuthorA", 'publisher_id'=>2,
'publisher_name'=>"PublisherB", 'publisher_reputation'="bad")
array('book_id'=>1, 'book_name'=>"BookA", 'author_id'=>2,
'author_name'=>"AuthorB", 'publisher_id'=>1
'publisher_name'=>"PublisherA", 'publisher_reputation'=>"good"),
array('book_id'=>1, 'book_name'=>"BookA", 'author_id'=>2,
'author_name'=>"AuthorB", 'publisher_id'=>2
'publisher_name'=>"PublisherB", 'publisher_reputation'=>"bad"),
一本书可以有几位作者和几位出版商。 作者可以与几本书相关联。 出版商可以与多本书相关联。 发布商只能拥有一个声誉(来自值列表:“好”,“平均”,“坏”)。
编辑:数据存储在3个表格中。作者(author_id,author_name),book(book_id,book_name),publisher(publisher_id,publisher_name,publisher_reputation)。
我想创建一个包含以下列的HTML表:
我目前正在使用以下代码:
<?php function transform($books) {
$result = array();
foreach($books as $key => $book) {
$book_id = $book['book_id'];
if (!isset($result[$book_id])) {
$result[$book_id] = array(
'author_name' => array(),
'publisher_name'.'publisher_reputation' => array(),
'book_name' => $book['book_name']
);
}
$result[$book_id]['publisher_name'.'publisher_reputation'] =
array_merge($result[$book_id]['publisher_name'.'publisher_reputation'],
array(($book['publisher_name'].'('.$book['publisher_reputation'].')')));
$result[$book_id]['author_name'] = array_merge($result[$book_id]
['author_name'], array(($book['author_name'])));
}
foreach($result as $key => $data) {
$result[$key]['publisher_name'.'publisher_reputation'] =
array_unique($result[$key]['publisher_name'.'publisher_reputation']);
$result[$key]['author_name'] = array_unique($result[$key]['author_name']);
}
return $result;
}
$books = transform($books)
;?>
我创建表的html代码:
<table>
<tr>
<th>Book Name</th>
<th>Author(s)</th>
<th>Publisher(s) & Reputation(s)</th>
</tr>
<?php foreach ($books as $book): ?>
<tr>
<td><?php htmlout($book['book_name']); ?></td>
<td><?php foreach(($book['author_name']) as $author_name): ?>
<?php htmlout($author_name);?><br /><?php endforeach; ?></td>
<td><?php foreach(($book['publisher_name'.'publisher_reputation']) as
$publisher_namereputation): ?></td>
<?php htmlout($publisher_namereputation);?><br /><?php endforeach; ?></td>
</tr>
<?php endforeach; ?>
结果表(表1):
Book Name | Author(s) | Publisher(s) & Reputation(s)
BookA AuthorA PublisherA(good)
AuthorB PublisherB(bad)
表2。:
Book Name | Author(s) | Publisher(s) & Reputation(s)
BookA AuthorA PublisherA(good)
AuthorB
PublisherB,也与同一本书相关联(但声誉“不好”)不会显示。我确实理解这是因为声誉是从列表中选择的(“好”,“平均”,“坏”),其值与任何单个publisher_id无关(多个发布者可以具有相同的声誉)。我尝试通过以下方式准备信誉列表来解决问题:
try
{
$result = $pdo->query('SELECT publisher_id, publisher_reputation FROM publisher');
}
catch (PDOException $e)
{
$error = 'Error fetching publisher reputation information!';
include 'error.html.php';
exit();
}
foreach ($result as $row)
{
$reputations[] = array('publisher_id' => $row['publisher_id'],
'publisher_reputation' => $row['publisher_reputation']);
}
(...)
但是,这给了我一个带有重复值的信誉列表(当数个数据库中有几个具有相同信誉的发布者时)。
问题:当我搜索与publisher_reputation = good的publisher_name关联的所有book_names时,如何设计返回表1的查询? 任何帮助,将不胜感激。
答案 0 :(得分:1)
我没有全面了解。当我环顾你发布的任何内容时,我遇到了一个你错过的东西,在“$ result = $ pdo-&gt; query(....”
这一行中关闭一个paranthesis答案 1 :(得分:0)
我假设你的数据库中有3个表是 -
1)书籍 - &gt;用外键存储书籍相关信息作为publisherId
2)发布者 - &gt;存储发布者相关信息,其中publisherId是PK
3)声誉 - &gt; HREF表b / w书和出版商,两个表PK为FK。
如果我猜对了,你可以考虑以下查询 -
SELECT * FROM books为B. INNER JOIN发布者为P on P.publisherId = B.publisherId INNER JOIN声誉为R on(R.publisherId = B.publisherId AND R.publisherId = P.publisherId)WHERE R.Reputation =“GOOD”