反规范表后查询

时间:2014-01-16 21:56:49

标签: php mysql sql

到目前为止,我的downloads表已经非规范化了。我有两个字段 - authorcountry。它们之间用空格分隔,例如Jack James authorus uk country

我决定将其标准化,因此我创建了一个名为downloads_authors的新表,其中包含字段(da_iddownloads_idda_authorda_country)和现在我有:

+-----+------------+---------+----------+
|da_id|downloads_id|da_author|da_country|
+-----+------------+---------+----------+
|1    |1           |Jack     |us        |
+-----+------------+---------+----------+
|2    |1           |James    |uk        |
+-----+------------+---------+----------+

到目前为止一直这么好..但是我以前使用它们的方式,我使用explode并且功能非常差,我得到了理想的结果 - <flag img> Jack, <flag img> James

现在,当我把它们放在另一张桌子里时,我想不出办法做到这一点:

SELECT * FROM downloads并列出相应的作者而没有内部循环(因为如果我执行了JOIN,那么我将一次又一次地获得来自downloads的信息。 / p>

所需的输出是:

item 
- author
item 
- author
- author

我对JOIN的看法不对,是不是要走了?

1 个答案:

答案 0 :(得分:1)

您的选项是加入并在您第一次获得新的下载ID时使用下载信息,并忽略下载信息,直到您获得新的下载ID。或者做我说的,查询数据并循环以构建新数组。或者您也可以使用group_concat将作者连接在一起作为单个字符串。

我只是查询所有下载然后查询所有作者。循环下载并将其分配给下载ID为密钥的阵列。然后遍历作者并使用下载ID将不同的作者分配到下载的子数组中。