我有两张表 images2 和 image_data
因此,目标是为所有图像上传(images2)设置1个表格,然后image_data将为该图像分配不同的选项。
例如,这里有一些示例数据:
因此image_id 10有多行,因为该图像与TN和CQ相关联。并且它们也可以与多种语言和幻灯片相关联,所以我会添加到第二行并更改slide_id或language_id ..如果想要添加更多,则为我添加新行。
目标是获得所有图像的列表,然后当您点击它时,它会弹出,您可以编辑选项并直接从那里进行更改。
我需要帮助编写查询。我现在拥有的那个:
SELECT images2.id, images2.filename, image_data.slide_id, image_data.language_id,
image_data.type FROM images2
LEFT JOIN image_data ON images2.id = image_data.image_id
该查询出现了一些错误。它显示了重复项,因为image_id 10有两行。
但我需要第二行图像#10,因为我需要看到它也与CQ相关联,因此我可以在弹出时检查复选框。
因此,我需要创建一个查询,以显示所有唯一的图像,没有重复项,以及它具有的所有选项。
我不确定这样做的最好方法..我是否需要重新执行数据库表的方式?任何帮助表示赞赏。
感谢。
答案 0 :(得分:2)
您可以使用GROUP_CONCAT()
将多行中的值转换为单个连接字符串。以下内容检索slides
和languages
的ID以及它们的名称,以便更好地促进您的表单。
SELECT
a.id,
a.filename,
GROUP_CONCAT(CONCAT(b.slide_id, '::', c.slide_name)) AS slides,
GROUP_CONCAT(CONCAT(b.language_id, '::', d.language_name)) AS languages,
GROUP_CONCAT(b.type) AS types,
FROM
images a
LEFT JOIN
image_data b ON a.id = b.image_id
LEFT JOIN
slides c ON b.slide_id = c.id
LEFT JOIN
languages d ON c.language_id = d.id
GROUP BY
a.id
图片10
的结果集如下所示:
id | image_filename | slides | languages | types
-------------------------------------------------------------------------
10 | p170sfhe... | 5::slide5 | 1::language1 | TN,CQ
在php中,只需explode()
基于分隔符的字符串。
答案 1 :(得分:1)
您可以使用GROUP_CONCAT获取字段的csv:
SELECT
images2.id,
images2.filename,
GROUP_CONCAT(DISTINCT image_data.slide_id) AS slides,
GROUP_CONCAT(DISTINCT image_data.language_id) AS langs,
GROUP_CONCAT(DISTINCT image_data.type) AS types
FROM images2
LEFT JOIN image_data ON (images2.id = image_data.image_id)
GROUP BY images2.id