0
  • 每张专辑都有许多图标。
  • 一个图标是当前的,如果它的字段current <> 0
  • 如果专辑的每个图标都是最新的,则专辑是最新的。

我需要知道: 对于每张专辑,专辑是最新的吗?

我试过了:

 "SELECT *, ".$subquery." AS current FROM tbl_album"

哪里$subquery是:

 SELECT EXISTS( SELECT 1 FROM tbl_icon2album JOIN tbl_album ON tbl_album.id=tbl_icon2album.albumID WHERE tbl_icon2album.b_current_in_timeproof = 0)

但这不起作用。我收到消息“ 1064 You have an error in your SQL syntax

有趣的是,子查询作为一个独立的工作很好。此外,主查询工作正常,如下所示:

SELECT *, 1 AS current FROM tbl_album

那么如果子查询有效,而主查询有效,为什么它们不能一起工作呢?

post scriptum:这个 问题提出了一个可行的解决方案。

4

2 回答 2

2

您在这里不需要子查询,试试这个:

SELECT  a.albumId,
        IF( SUM(IF(i.current<>1,1,0)) = 0,'Current','Not Current') as IsCurrent
FROM    tbl_album a
LEFT JOIN tbl_icon2album i ON i.albumId = a.albumId
GROUP BY a.albumId

更新了查询以根据图标当前状态的总和反映专辑是否为当前状态。

更新:将 i.current<>0 更改为 i.current<>1

于 2013-11-12T20:09:00.097 回答
0

因此,由于您没有提供表格的结构,因此我在这里进行了一些猜测。您正在尝试选择所有专辑,并说明它们是否为“当前”,其中“当前”指定为它们具有一个或多个当前图标:

SELECT 
    IF(
        tbl_icon2album.current != 0,
        "current",
        "not current"
    ) AS isAlbumCurrent,
    tbl_album.*
FROM tbl_album
LEFT JOIN tbl_icon2album ON 
    tbl_album.id=tbl_icon2album.albumID
GROUP BY tbl_album.id;
于 2013-11-12T20:13:16.367 回答