mysql - 如何从列中存储为 XML 的列表中链接带有 id 的表

标签 mysql xml linked-tables

希望这个问题能很好地解释它。我有一个图书馆的数据库。由于它们可以多次使用,并且包含的​​数据不仅仅是名称,所以我有一个作者表。然后是 Books 的 table 。我可以通过名为 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。

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

(或者是否有更好的方法来完成这个?)

最佳答案

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

创建表:

图书作者

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

关于mysql - 如何从列中存储为 XML 的列表中链接带有 id 的表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8916289/

相关文章:

sql-server - 更新 Access 2010 链接表连接

mysql - phpmyadmin 警告, "The additional features for working with linked tables have been deactivated"

ms-access - 以编程方式更改 ms access 中链接表的连接

mysql - 插入行详细信息(例如用户率平均 SQL)后触发自动平均

python - 如何解析带有目录结构的xml文件

php - 如何在 cookie 值中保护用户 ID

c# - 将 Xml 反序列化为 List<T> - xmlns ='' 不是预期的

c# - 如何在 .NET 中解析联合和列表类型的值?

mysql - 使用 HAVING GROUP_CONCAT 计算记录行

php - 为什么我的 php 连接到 sql 数据库代码不起作用?