gpt4 book ai didi

php - 在 MYSQL 中有效地连接 3 个表

转载 作者:行者123 更新时间:2023-11-29 05:42:57 25 4
gpt4 key购买 nike

我有 3 个这样的表:

图像(约 10,000 行)

id | place_id | filename 
---|----------|----------
1 | 4 | abc.jpg
2 | 3 | def.jpg
3 | 4 | ghi.jpg
4 | 7 | jkl.jpg

标签(~100 行)

id |   name   |
---|----------|
1 | tagA |
2 | tagB |
3 | tagC |
4 | tagD |

tagsToImages(约 30,000 行)

id |  tag_id  | image_id
---|----------|----------
1 | 1 | 4
2 | 3 | 2
3 | 2 | 4
4 | 1 | 1

例如,最后一张表显示 id = 1 的标签与 id = 4 的图像链接。

我有两个问题,一个很简单(我认为!),一个更难。

简单的问题

给定一个 place_id,我如何列出所有在该 place_id 中有图像的标签?一个例子是:

给定 place_id = 7,返回 tagA,tagB。

难题

我想做的是选择所有具有特定 place_id 的图像,并将每个图像与标签列表相关联,如下所示:

选择 place_id = 4 的所有内容,同时加入标签信息。

 filename |    tags    
-----------------------
abc.jpg | tagA
ghi.jpg | tagA, tagB

通过执行多个查询在 PHP 中执行此操作会更好,还是我可以使用 MYSQL 执行此操作?

最佳答案

  1. SELECT i.place_id, t.name as tag_name<br/>
    FROM images i<br/>
    INNER JOIN tagsToImages tti ON (tti.image_id = i.id)<br/>
    INNER JOIN tags t ON (t.id = tti.tag_id)<br/>
    WHERE i.place_id = 7

  2. SELECT i.filename, GROUP_CONCAT(t.name SEPARATOR ',') AS tags<br/>
    FROM images i<br/>
    INNER JOIN tagsToImages tti ON (tti.image_id = i.id)<br/>
    INNER JOIN tags t ON (t.id = tti.tag_id)<br/>
    WHERE i.place_id = 4
    GROUP BY i.filename

如果可能,最好避免多次查询。
*请注意 GROUP_CONCAT 的最大长度由 group_concat_max_len 控制多变的。如果您希望获得一长串串联字符串,您可能需要更改默认值。

更新
如果您希望查询显示没有关联标签的图像,请更改 INNER JOIN s 至 LEFT JOIN

关于php - 在 MYSQL 中有效地连接 3 个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5120859/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com