Использование внутреннего соединения MySql для отображения данных на круговой диаграмме Google - PullRequest
0 голосов
/ 12 октября 2018

Мне нужно показать некоторые данные на круговой диаграмме Google, и мне нужно использовать 2 таблицы для достижения этой цели.Имена таблиц, которые являются аутентификацией и агентами, и обе эти таблицы имеют похожий столбец с именем «agentlogin».У agentdetails есть все данные об агентах, и из аутентификации я могу получить количество зарегистрированных агентов.Мне нужно получить данные agentlogin из agentdetails, которые также присутствуют при аутентификации, и я хочу сгруппировать их по столбцу 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;
            }
        }
    }

Таблица

Как мне это сделать?Заранее спасибо.

1 Ответ

0 голосов
/ 12 октября 2018

Если вы хотите посчитать, произошла ли аутентификация, вам нужно объединение LEFT , чтобы получить все результаты из 1-й таблицы, а не только те, которые появляются в обоих

Если соотношение между таблицами составляет 1 к 1, поэтому каждый агент будет отображаться только один раз, то в левом соединении дублированные резилты не появятся, а повторное сопоставление должно быть таким же, как вы уже достигли

Обратите внимание, что общее количество регистраций будет, конечно, только для зарегистрированных, а не для всех агентов:

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

Ваш исходный запрос:

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;

Надеюсь, что поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...