简体   繁体   English

选择3个具有计数和联接的表

[英]Select 3 tables with count and join

I've 3 tables tb1, users, users_credits. 我有3个表tb1,users,users_credits。 My gol is to combine two select (sel1, sel2) into a single view and display 0 in the sel2 where there isn't rows (left join?) 我的目标是将两个选择(sel1,sel2)组合成一个视图,并在没有行(左联接?)的sel2中显示0。

sel1 SEL1

SELECT 
users.userid, 
users.datareg,
users_credits.credits,
FROM 
users,
users_credits,
WHERE
users.userid = users_credits.userid

Sel2 SEL2

SELECT COUNT(*) FROM tb1 where tb1.id_user = users.userid

table structure 表结构

tb1
`id` int(11) NOT NULL AUTO_INCREMENT,
`id_user` decimal(11,0) NOT NULL,
`datains` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)

users 用户

`userid` int(4) unsigned NOT NULL AUTO_INCREMENT,
`datareg` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
 PRIMARY KEY (`userid`)

users_credits users_credits

`id` int(11) NOT NULL AUTO_INCREMENT,
`userid` int(11) NOT NULL,
`credits` decimal(5,0) NOT NULL,
`data` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)

What is the best way to do this? 做这个的最好方式是什么? Thanks. 谢谢。

SELECT  users.userid, 
        users.datareg,
        users_credits.credits,
        COALESCE(c.totalCount,0) totalCount
FROM    users
        LEFT JOIN users_credits
            ON users.userid = users_credits.userid
        LEFT JOIN
        (
            SELECT  id_user, COUNT(*) totalCount 
            FROM    tb1 
            GROUP   BY id_user
        ) c ON c.id_user = users.userid

To further gain more knowledge about joins, kindly visit the link below: 要进一步获得有关联接的知识,请访问以下链接:

UPDATE 1 更新1

SELECT  users.userid, 
        users.datareg,
        users_credits.credits,
        COALESCE(c.totalCount,0) totalCount,
        c.max_datains
FROM    users
        LEFT JOIN users_credits
            ON users.userid = users_credits.userid
        LEFT JOIN
        (
            SELECT  id_user, MAX(datains) max_datains, COUNT(*) totalCount 
            FROM    tb1 
            GROUP   BY id_user
        ) c ON c.id_user = users.userid

UPDATE 2 更新2

you need to create two views for this: 您需要为此创建两个视图:

1st View: 第一视图:

CREATE VIEW tbl1View
AS
SELECT  id_user, MAX(datains) max_datains, COUNT(*) totalCount 
FROM    tb1 
GROUP   BY id_user

2nd View 第二视图

CREATE VIEW FullView
AS
SELECT  users.userid, 
        users.datareg,
        users_credits.credits,
        COALESCE(c.totalCount,0) totalCount,
        c.max_datains
FROM    users
        LEFT JOIN users_credits
            ON users.userid = users_credits.userid
        LEFT JOIN tbl1View c ON c.id_user = users.userid

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM