1

我有一个客户,可以有一个项目,哪个项目可以有画廊,哪些画廊有图像。所以我创建了一个表:每个表中的客户、项目、画廊、图像我在项目中有标识符-client_id、画廊-project_id、图像-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 的答案结合而成的 :)

4

3 回答 3

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
于 2013-08-11T19:28:11.530 回答
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.
  ]
} 
于 2013-08-11T19:37:04.400 回答
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;
于 2013-08-11T19:38:59.330 回答