MYSQL从表中选择

时间:2013-08-11 19:25:22

标签: mysql sql

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

3 个答案:

答案 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;