0

MySQL を使用してブログ サイトを開発しています。2 つのテーブルにまたがるサブクエリを実行しています。

DROP TABLE IF EXISTS `blog_entries`;
CREATE TABLE IF NOT EXISTS `blog_entries` (
    `id` int(10) unsigned NOT NULL auto_increment,
    `title` varchar(255) NOT NULL,
    `slug` varchar(255) NOT NULL,
    `live` boolean default FALSE,
    `date` datetime NOT NULL,
    `author` int(3) default 0,
    `body` text NOT NULL,
    `category` int(2) default 0,
    `tags` varchar(255) default '',
    UNIQUE KEY `id` (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

DROP TABLE IF EXISTS `blog_entry_comments`;
CREATE TABLE IF NOT EXISTS `blog_entry_comments` (
    `id` int(10) unsigned NOT NULL auto_increment,
    `blog_entry_id` int(10) NOT NULL,
    `live` boolean default FALSE,
    `date` datetime NOT NULL,
    `name` varchar(128) default '',
    `email` varchar(128)    default '',
    `web` varchar(128)  default '',
    `comments` text NOT NULL,
    UNIQUE KEY `id` (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

クエリは次のようになります。

SELECT be.id, be.title, 
       (SELECT (COUNT(bec.blog_entry_id)) AS blog_entry_comments_total 
        FROM blog_entry_comments bec 
        WHERE be.id = bec.blog_entry_id), 
       (SELECT (COUNT(bec.blog_entry_id)) AS blog_entry_comments_disabled 
        FROM blog_entry_comments bec 
        WHERE be.id = bec.blog_entry_id AND bec.live = 0) 
FROM blog_entries be;

ここで、「AS blog_entry_comments_total」および「AS blog_entry_comments_disabled」というビットが結果列にそれぞれの名前を付けると考えましたが、以下の結果からわかるように、サブクエリ全体を列名として取得しました。

| id | title | (SELECT (COUNT(bec.blog_entry_id)) AS blog_entry_comments_total FROM blog_entry_comments bec WHERE be.id = bec.blog_entry_id) | (SELECT (COUNT(bec.blog_entry_id)) AS blog_entry_comments_disabled FROM blog_entry_comments bec WHERE be.id = bec.blog_entry_id AND bec.live = 0) |

+----+----------------

|  1 | Blog Entry One | 3 | 1
|  2 | New Post | 0 | 0
|  3 | Testing | 0 | 0

3 rows in set (0.00 sec)

必要なのは、この列を参照するために使用できるハンドルですが、これは適切な名前のハンドルを提供していないようです。私が探しているのは、次のような結果セットです。

| id | title | blog_entry_comments_total | blog_entry_comments_disabled |

+----+----------------

|  1 | Blog Entry One | 3 | 1
|  2 | New Post | 0 | 0
|  3 | Testing | 0 | 0

3 rows in set (0.00 sec)

私が間違っていることはありますか?

4

1 に答える 1

0

エイリアスが間違った場所にありました。次のようになります。

SELECT be.id, be.title, 
       (SELECT (COUNT(bec.blog_entry_id))
        FROM blog_entry_comments bec 
        WHERE be.id = bec.blog_entry_id) AS blog_entry_comments_total, 
       (SELECT (COUNT(bec.blog_entry_id)) 
        FROM blog_entry_comments bec 
        WHERE be.id = bec.blog_entry_id AND bec.live = 0) AS blog_entry_comments_disabled

FROM blog_entries be;
于 2013-08-13T17:49:29.893 に答える