gpt4 book ai didi

mysql - SQL SELECT 结合 JOINS 和 CONTACTS 在一个选定字段中生成相同数据的多个条目

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

手头的情况:

  • 表格 fotos_images => 1 行数据

    基本图片信息

  • 表格 fotos_keywords => 1 行数据

    一个关键字'Sonne'

  • 表格 fotos_locations => 3 行数据

    一行是“Berlin”,下一行是“Treptow-Köpenick”,下一行是“Deutschland”

  • 表格 fotos_locations_images_idx => 3 行数据

    来自“fotos_images”和“fotos_locations”的三对 id 组合

  • 表格 fotos_keywords_images_idx => 1 行数据

    来自“fotos_keywords”和“fotos_images”的一对 id 组合

那里会有更多 - 数百个甚至更多,现在数据库中只保存了一个图像文件。图片将具有 0 到 n 个位置和 0 到 n 个关键字。

我的查询是在一行中获取一幅图像的所有数据,以便在程序的这一部分进一步处理:

SELECT i.id
, i.name
, i.filename
, i.iso
, i.aperture
, i.camera
, i.exposure
, i.copyright
, i.timestamp
, i.text
, GROUP_CONCAT(k.keyword SEPARATOR ', ') keyword
, GROUP_CONCAT(l.location SEPARATOR ', ') location
FROM fotos_images i
LEFT
JOIN fotos_keywords_images_idx ki
ON i.id = ki.id_image
LEFT
JOIN fotos_keywords k
ON ki.id_keyword = k.id
LEFT
JOIN fotos_locations_images_idx li
ON i.id = li.id_image
LEFT
JOIN fotos_locations l
ON li.id_location = l.id
GROUP
BY i.id
, i.name
, i.filename
, i.iso
, i.aperture
, i.camera
, i.exposure
, i.copyright
, i.timestamp
, i.text;

我从查询中得到的:

id         197
name Abendsonne
filename caa3005cce1791f3e27e8ce4cf11ee59.jpg
iso 100
aperture f/5.6
camera Canon EOS 60D
exposure 1/250
copyright Hans Otto
timestamp 2014-01-07 01:08:02
text
keyword Sonne, Sonne, Sonne
location Berlin, Treptow-Köpenick, Deutschland

我期望(或想要)从查询中得到什么:

id         197
name Abendsonne
filename caa3005cce1791f3e27e8ce4cf11ee59.jpg
iso 100
aperture f/5.6
camera Canon EOS 60D
exposure 1/250
copyright Hans Otto
timestamp 2014-01-07 01:08:02
text
keyword Sonne
location Berlin, Treptow-Köpenick, Deutschland

查看“关键词”,因为这张图片只附加了一个关键词——其他图片可能有更多或零个。但为什么它会相乘以及如何摆脱这个数学技巧呢?我知道它与位置有关,但我不知道如何解决这个难题。

非常感谢任何提示或解决方案!

最佳答案

如果您只是在 k.keyword SEPARATOR ', ' 前面添加 DISTINCT 就可以正常工作:

...
, GROUP_CONCAT(DISTINCT k.keyword SEPARATOR ', ') keyword
...

关于mysql - SQL SELECT 结合 JOINS 和 CONTACTS 在一个选定字段中生成相同数据的多个条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20962054/

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