我有两张表images2和image_data
因此,目标是为所有图像上载(images2)提供一个表,然后图像数据将为该图像分配不同的选项。
例如,下面是一些示例数据:
因此,图像id 10具有多行,因为该图像与tn和cq都关联。它们还可以与多个语言和幻灯片关联,因此我将添加到第二行并更改幻灯片ID或语言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
这个查询有几个问题..它显示重复项,因为图像id 10有两行。
但我需要第二行图像10,因为我需要看到它也与cq相关,这样我可以在它弹出时选中复选框。
因此,我需要创建一个查询来显示所有唯一的图像,没有重复,以及它拥有的所有选项。
我不知道最好的办法。我需要重新做我的数据库表的方式吗?如有任何帮助,我们将不胜感激。
谢谢。
最佳答案
您可以使用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()
基于分隔符的字符串。