我有一个客户,可以有一个项目,项目可以有画廊,画廊有图像。所以我创建了一个表:客户,项目,画廊,每个表中的图像我在项目中都有标识符 - client_id,galleries - project_id,images - gallery_id。我想为特定客户选择所有项目和图库以及所有图像。问题是我想分开画廊。我可以用按钮切换画廊的前端。
这是完整的查询,但如何将每个图库与结果分开:
SELECT im.image_name, im.gid, ga.gallery_name FROM images` AS im, `gallerys` AS ga , `projects` AS pr WHERE pr.id = ga.project_id AND ga.id = im.gid AND pr.id=$id
这是任务的解决方案:
SELECT group_concat( im.image_name ) , im.gid, ga.gallery_name
FROM `gl_images` AS im
JOIN `gl_gallerys` AS ga ON ga.id = im.gid
JOIN `gl_projects` AS pr ON pr.id = ga.project_id
WHERE pr.cid =43
GROUP BY ga.id
它结合了Joe Minichino和Gordon的答案:)
答案 0 :(得分:0)
您可以尝试这样的事情: -
SELECT im.image_name, im.gid, ga.gallery_name
FROM `images` AS im, `gallerys` AS ga, `projects` AS pr
WHERE pr.id = ga.project_id AND ga.id = im.gid AND pr.id=$id
group by ga.id
答案 1 :(得分:0)
虽然我认为这是一个可怕的解决方案,但您可以尝试
SELECT group_concat(im.image_name) as image_names,
group_concat(im.gid) as image_ids,
ga.gallery_name
FROM `images` AS im, `gallerys` AS ga, `projects` AS pr
WHERE pr.id = ga.project_id AND ga.id = im.gid AND pr.id=$id
group by ga.id;
但是,如果我要做你正在做的事情,我至少会在应用程序级别处理结果集以获得更整洁的数据结构,即不是单独的图像名称和ID数组,我会尝试创建一个json结构如
{ galleries :
[
{ galleryId: 1, images: [ { name: 'pic1.jpg', id: 1}, { name: 'pic2.jpg', id:2 }] },
// etc.
]
}
答案 2 :(得分:0)
首先,您应该使用正确的join
语法,而不是将连接条件放在where
子句中。
其次,我并不完全理解你的意思:“为特定客户提供所有图像。”但是您的查询有pr.id = $id
条件。我认为这应该是pr.client_Id = $id
。
第三,我不确定你的意思是“问题在于我想把画廊分开。”我认为按gallery_name
排序会做你想要的。
最终查询是:
SELECT im.image_name, im.gid, ga.gallery_name
FROM `images` im join
`gallerys` ga
on ga.id = im.gid join
`projects` pr
on pr.id = ga.project_id
where pr.client_Id = $id
order by ga.gallery_name;