简体   繁体   English

使用MySql内部联接在Google Piechart上显示数据

[英]Using MySql inner join to show data on google piechart

I need to show some data on google piechart and I have to use 2 tables to achieve this. 我需要在Google Piechart上显示一些数据,并且我必须使用2个表来实现此目的。 The table names being authentication and agentdetails and both of these tables have similar column named "agentlogin". 表名称是身份验证和代理详细信息,并且这两个表都有相似的列,称为“ agentlogin”。 agentdetails have all the datas of agents and from authentication I can get the number of agent who have registered. agentdetails具有代理的所有数据,通过身份验证,我可以获取已注册的代理的数量。 I need to get the data of agentlogin from agentdetails that also present on authentication and i want to group them by skill2 column. 我需要从也显示在身份验证中的agentdetails获取agentlogin的数据,我想按skill2列对它们进行分组。

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<script type="text/javascript" src="https://www.google.com/jsapi"></script>
<script type="text/javascript">
    google.load("visualization", "1", { packages: ["corechart"] });
    google.setOnLoadCallback(drawChart);
    function drawChart() {
        var options = {
            title: 'Registration'
        };
        $.ajax({
            type: "POST",
            url: "adminrep.aspx/GetChartData",
            data: '{}',
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (r) {
                var data = google.visualization.arrayToDataTable(r.d);
                var chart = new google.visualization.PieChart($("#chart")[0]);
                chart.draw(data, options);
            },
            failure: function (r) {
                alert(r.d);
            },
            error: function (r) {
                alert(r.d);
            }
        });
    }
</script>

public static List<object> GetChartData()
    {
        string query = "SELECT authentication.agentlogin, agentdetails.skill2, COUNT(authentication.agentlogin) TotalRegistration FROM agentdetails ";
        query += " INNER JOIN authentication ON agentdetails.agentlogin = authentication.agentlogin WHERE agentdetails.location = 'PNQ10-Pune' GROUP BY skill2";
        string MyConString = ConfigurationManager.ConnectionStrings["connStr"].ConnectionString;
        List<object> chartData = new List<object>();
        chartData.Add(new object[]
        {
            "skill2", "TotalRegistration"
        });
        using (MySqlConnection con = new MySqlConnection(MyConString))
        {
            using (MySqlCommand cmd = new MySqlCommand(query))
            {
                cmd.CommandType = CommandType.Text;
                cmd.Connection = con;
                con.Open();
                using (MySqlDataReader sdr = cmd.ExecuteReader())
                {
                    while (sdr.Read())
                    {
                        chartData.Add(new object[]
                        {
                            sdr["skill2"], sdr["TotalRegistration"]
                        });
                    }
                }
                con.Close();
                return chartData;
            }
        }
    }

Table

How do I get this done? 我该如何完成? Thanks in advance. 提前致谢。

If you would like to count if an authentication had occurred, well, you would need a LEFT join to get all of the results from the 1st table, not just the ones appearing in both 如果您想计算是否进行了身份验证,那么,您将需要进行LEFT联接才能从第一张表中获取所有结果,而不仅仅是两个表中都出现的结果

If the relationship between the tables is 1 to 1, so every agent will just appear once, then no duplicate resilts will appear on the left join, and the resilt should be similar to what you have already arrived to 如果表之间的关系是1到1,那么每个座席将只出现一次,则左联接上将不会出现重复的重新定义,并且重新定义应类似于您已经到达的重新定义。

Notice that the total registration count will be only of the registered, not of all agents, of course: 请注意,当然,注册总数将仅是已注册的,而不是所有代理的:

SELECT
 ad.skill2,
SUM(IF(  auth.agentlogin IS NULL, 1,0)) AS TotalRegistration
 FROM agentdetails ad
LEFT JOIN authentication auth ON ad.agentlogin = auth.agentlogin
WHERE ad.location = 'PNQ10-Pune'
GROUP BY
ad.skill2

Your original query: 您的原始查询:

SELECT authentication.agentlogin, agentdetails.skill2, COUNT(authentication.agentlogin) TotalRegistration FROM agentdetails
        INNER JOIN authentication ON agentdetails.agentlogin = authentication.agentlogin WHERE agentdetails.location = 'PNQ10-Pune' GROUP BY skill2;

Hope that helps 希望能有所帮助

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

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