0

我所拥有的是:

  1. 我有一个表格,如图像、标签、标签名称和下载

  2. 其中图像可以有多个标签并位于单独的表格中

  3. 下载表将维护图像的总下载量

现在我希望你能理解我的表定义的目的


我需要的是:

  1. 我需要在列出所有图像时显示标签。例如,我在一页中显示 10 张图片,在每张图片下方我想显示他们的所有标签。(假设这在一个查询结果中是不可能的。如果是这样,那么其他方法会很好

  2. 当我将单个图像显示为单独的页面(例如博客文章页面)时,我希望所有标签都像在 stackoverflow 中一样显示。


表结构是:

图像表

图像ID | 姓名 |

1 | 样品1
2 | 样品2
3 | 样品3
4 | 样品3

...................................

标记名表

标记 | 姓名

1 | 标记名1
2 | 标记名2
3 | 标记名3
4 | 标记名3

...................................

标签表

编号 | 图像ID | 标记

1 | 1 | 1
2 | 1 | 2
3 | 1 | 3
4 | 2 | 1
5 | 3 | 4

...................................

下载表

编号 | 图像ID | 下载

1 | 1 | 5
1 | 2 | 3

...................................

注意:...其他图像在此表中没有参考,但图像肯定有至少一个标签

在这里,我对下载表有一个性能问题。是通过在下载表中仅包含 id 和 imageid 来为每个下载添加一行,还是拥有另一个字段并像上面的表示例中那样增加它 - 也许我应该将此作为一个单独的问题提出,如果是这样,请忽略这一段.


因此,如果可能的话,请建议/建议我,否则请提出替代方案。

4

1 回答 1

3
select image_name, GRP_CONCAT(tag_name)
from images, tags, tagnames
where tags.image_id = images.image_id
and tags.tag_id = tagnames.tag_id 
group by image_name

http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_group-concat

查询应该返回图像名称,以及它在逗号分隔字符串中的所有标签。请参考 Group_CONCAT() 函数文档,并确认语法。您还可以更改分隔符。

于 2012-11-26T06:35:02.207 回答