2

希望这个问题能很好地解释它。我有一个图书馆的数据库。由于它们可以多次使用,并且包含的​​数据不仅仅是名称,我有一个作者表。然后是书籍的桌子。我通过名为 Author_id 的列将作者链接到书籍没有问题。

我要做的是有一个名为 Author_IDs 的列,其中包含一个 ID 列表,因为一本书可以有多个 ID。在 Author_IDs 列中,我有:

<id>3478</id>
<id>6456</id>

使用 MySQL 中的 ExtractValue 函数,我可以使用以下方法将表与一个或另一个 id 链接: WHERE Author.id = ExtractValue(Book.Author_IDs,"/id[2]") // 以获取第二个 ID。

我的问题是,我希望能够自动显示一本书的所有作者,但不知道如何在不循环的情况下多次链接到它。如何获得显示所有作者的结果?

(或者有没有更好的方法来实现这一点?)

4

3 回答 3

1

首先,我必须对您的存储方法投反对票。如果可能,应避免将数据作为 xml 存储在 mysql 列中。如果您使用正常的方法,您会发现这个问题要容易得多。

创建表:

book_authors

book_id     author_id
-------     ---------
      1             1
      1             2
      1             3
      2             2
      2             4

然后要获取与某本书相关联的所有作者,这是一个简单的查询。

Select
   b.book_id,
   b.book_name,
   GROUP_CONCAT(a.author_name) AS 'authors'
FROM
   book_authors ba LEFT JOIN
   books b ON ba.book_id = b.book_id LEFT JOIN
   authors a ON ba.author_id = a.author_id
GROUP BY
   ba.book_id
于 2012-01-18T19:50:49.903 回答
0

不确定我是否完全理解。像这样的东西可以解决问题吗?

select a.* from tblBooks b left join tblAuthors a on (b.authors = concat('%', a.id, '%') where b = 'book id';

于 2012-01-18T19:52:43.617 回答
0

我会这样做

结构

tblBooks
--------
book_id
book_name

tblAuthors
----------
author_id
author_name

tblBooksToAuthors
-----------------
id
book_id
author_id

询问

select a.*
from tblAuthors a
left join tblBooksToAuthors b2a on (b2a.author_id = a.author_id)
where b2a.book_id = {your book id};
于 2012-01-18T20:49:00.927 回答