2016-04-13 3 views
1

に参加から選択するか、数える、私は、任意のより良いを思って、gallery_media、ループ内のすべての行を選択する必要がありますか?私は、クエリ以下使用した前<code>media_action</code>行、<br> に存在し、<code>gallery_id = 1</code><code>media</code>をカウントしたいテーブル

// select all gallery_media rows 
var dbQuery = `SELECT * 
    FROM "gallery_media" WHERE gallery_id = $1`; 
var dbParams = [galleryId]; 
var dbQueryR = yield Promise.resolve(queryPromise(dbClient, dbQuery, dbParams)); 

// loop 
var total; 
for (var i = 0; i < dbQueryR.rows.length; i++) { 
    var mediaId = dbQueryR.rows[i].media_id; 
    // select count media_action where media_id = mediaId 
    // and total++; 
    var dbQuery = `SELECT count(*) 
    AS total_row_count 
    FROM "media_action" WHERE media_id = $1`; 
} 

// below example data final result get total = 3 
// if add where type = 0 get total = 2 

データ

gallery_media  
gallery_id | media_id 
1 | 1 
1 | 2 
1 | 3 

media_action  
media_id | type 
1 | 0 
3 | 0 
3 | 1 

テーブル

CREATE TABLE gallery_media 
(
    id serial NOT NULL, 
    gallery_id integer NOT NULL, 
    media_id integer NOT NULL, 
... 

CREATE TABLE media_action 
(
    id serial NOT NULL, 
    media_id integer NOT NULL, 
    type integer NOT NULL 
... 

答えて

2

は普通のように見える参加 - 必要に応じて添加WHERE条件で:

SELECT count(*) AS total 
FROM gallery_media g 
JOIN media_action m USING (media_id) 
WHERE g.gallery_id = $1 
-- AND m.type = 0 -- optional 

Details in the manual.

+0

私はこれを今試してみましょう、説明のおかげで! – user1575921

関連する問題