【问题标题】:join two table folder and image加入两个表文件夹和图像
【发布时间】:2014-12-02 09:39:58
【问题描述】:
       album
------------------
  aid  |  aname  |  
------------------
  1   | album1   | 
  2   | album2   | 
  3   | album3   | 
  4   | album4   | 
------------------

       image
---------------------------------------
  iid  |  title  |  albumid |  imgurl
---------------------------------------
  1   | img1     |   3      |  image3.jpg
  2   | img2     |   1      |  image1.jpg
  3   | img3     |   2      |  image4.jpg
  4   | img4     |   0      |  image5.jpg
---------------------------------------

我有两张表专辑和图片。在图像表中albubid= 0 表示图像不属于任何文件夹。我需要包含所有文件夹名称和文件夹内图像计数的 imageurl,如下表所示 mysql。

示例:

----------------------------------------------------------------
  id=aid+iid  |  name= aname +title | imgurl          | countimg
----------------------------------------------------------------
  1           | album1              |       null      |  1
  2           | album2              |       null      |  1
  3           | album3              |       null      |  1
  4           | album4              |       null      |  0
  4           | img4                |    image5.jpg   |  0
-----------------------------------------------------------------

请问有什么可以帮忙的吗?提前致谢。

【问题讨论】:

  • 在图片中,如果没有相册,为什么不放空呢?另外请解释你需要什么,你的例子没有任何意义
  • 我同意 No Idea For Name 的观点。为什么这是 0 而不是 null?使用 0 时,您甚至不能对专辑使用数据库约束(即外键)。对我来说似乎是个坏主意。
  • 是的,我同意,但是表格是以前创建的,没有更改的权利。
  • Hi No Idea For Name 和 Thorsten Kettner,如果我输入 null 而不是 0 会有什么优势?我如何在专辑上使用数据库约束(即外键)。因为如果我把 null 数据类型不能是 int(albumid) 并且专辑表的帮助是 int 类型的主键。然后会出现类型不匹配错误。如果我错了,请告诉我。有什么建议吗?

标签: mysql sql select group-by union


【解决方案1】:

试试这个:

SELECT a.aid AS `id`, a.aname AS `name`, NULL AS imgurl, COUNT(i.iid) countimg 
FROM album a 
LEFT OUTER JOIN image i ON a.aid = i.albumid  
GROUP BY a.aid 
UNION 
SELECT a.iid AS `id`, i.title AS `name`, imgurl AS imgurl, 0 countimg 
FROM image i 
WHERE i.albumid = 0;

【讨论】:

  • 嗨,Saharsh Shah,谢谢,它提供了我正在寻找的东西。但是我们可以避免 UNION 吗?我们可以只用连接查询得到它吗?请给我建议。
  • @Ashim 不客气...根据我的说法,您必须在此查询中使用 UNION
  • @Ashim:UNION(顺便说一下,最好是 UNION ALL)是这里最好的方法,因为您结合了两个不同的查询。但是,如果您出于某种原因确实必须避免使用 UNION,则可以使用完全外连接来解决此问题。
  • 感谢 Thorsten Kettner 的建议。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-10-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多