到目前为止,我的downloads
表已经非规范化了。我有两个字段 - author
和country
。它们之间用空格分隔,例如Jack James
author
和us uk
country
。
我决定将其标准化,因此我创建了一个名为downloads_authors
的新表,其中包含字段(da_id
,downloads_id
,da_author
,da_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
的看法不对,是不是要走了?
答案 0 :(得分:1)
您的选项是加入并在您第一次获得新的下载ID时使用下载信息,并忽略下载信息,直到您获得新的下载ID。或者做我说的,查询数据并循环以构建新数组。或者您也可以使用group_concat将作者连接在一起作为单个字符串。
我只是查询所有下载然后查询所有作者。循环下载并将其分配给下载ID为密钥的阵列。然后遍历作者并使用下载ID将不同的作者分配到下载的子数组中。