使用mysql内部连接在google piechart上显示数据

o3imoua4  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(353)

我需要在googlepiechart上显示一些数据,我必须使用两个表来实现这一点。表名是authentication和agentdetails,这两个表都有类似的列,名为“agentlogin”。agentdetails拥有代理的所有数据,通过身份验证,我可以得到已注册的代理的数量。我需要从agentdetails中获取agentlogin的数据,这些数据也存在于身份验证中,我想按skill2列对它们进行分组。

  1. <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
  2. <script type="text/javascript" src="https://www.google.com/jsapi"></script>
  3. <script type="text/javascript">
  4. google.load("visualization", "1", { packages: ["corechart"] });
  5. google.setOnLoadCallback(drawChart);
  6. function drawChart() {
  7. var options = {
  8. title: 'Registration'
  9. };
  10. $.ajax({
  11. type: "POST",
  12. url: "adminrep.aspx/GetChartData",
  13. data: '{}',
  14. contentType: "application/json; charset=utf-8",
  15. dataType: "json",
  16. success: function (r) {
  17. var data = google.visualization.arrayToDataTable(r.d);
  18. var chart = new google.visualization.PieChart($("#chart")[0]);
  19. chart.draw(data, options);
  20. },
  21. failure: function (r) {
  22. alert(r.d);
  23. },
  24. error: function (r) {
  25. alert(r.d);
  26. }
  27. });
  28. }
  29. </script>
  30. public static List<object> GetChartData()
  31. {
  32. string query = "SELECT authentication.agentlogin, agentdetails.skill2, COUNT(authentication.agentlogin) TotalRegistration FROM agentdetails ";
  33. query += " INNER JOIN authentication ON agentdetails.agentlogin = authentication.agentlogin WHERE agentdetails.location = 'PNQ10-Pune' GROUP BY skill2";
  34. string MyConString = ConfigurationManager.ConnectionStrings["connStr"].ConnectionString;
  35. List<object> chartData = new List<object>();
  36. chartData.Add(new object[]
  37. {
  38. "skill2", "TotalRegistration"
  39. });
  40. using (MySqlConnection con = new MySqlConnection(MyConString))
  41. {
  42. using (MySqlCommand cmd = new MySqlCommand(query))
  43. {
  44. cmd.CommandType = CommandType.Text;
  45. cmd.Connection = con;
  46. con.Open();
  47. using (MySqlDataReader sdr = cmd.ExecuteReader())
  48. {
  49. while (sdr.Read())
  50. {
  51. chartData.Add(new object[]
  52. {
  53. sdr["skill2"], sdr["TotalRegistration"]
  54. });
  55. }
  56. }
  57. con.Close();
  58. return chartData;
  59. }
  60. }
  61. }


我该怎么做?提前谢谢。

xuo3flqw

xuo3flqw1#

如果您想计算是否发生了身份验证,那么您需要一个左联接来获取第一个表中的所有结果,而不仅仅是出现在两个表中的结果
如果表之间的关系是1比1,那么每个代理只会出现一次,那么左连接上将不会出现重复的resilt,并且resilt应该与您已经到达的类似
请注意,注册总数将仅限于已注册的代理,而不是所有代理,当然:

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

您的原始查询:

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

希望有帮助

展开查看全部

相关问题