【问题标题】:How to retrieve two results from SQL Database如何从 SQL 数据库中检索两个结果
【发布时间】:2016-05-25 21:40:20
【问题描述】:

我正在使用 PHP 服务器和使用 CPanel 的 SQL 数据库。

我正在使用 SQL 查询从数据库中检索值(数字)并将它们传递给单独的 javascript 文件。 为了实现这一点,我首先在一个单独的 PHP 文件上创建了一个查询,以获取信息:

文件名:SQLamountofusers.php

<?php
$query = sprintf("SELECT COUNT( * ) as c
FROM  `applications` 
JOIN  `users` ON ( users.id = applications.id_m ) 
WHERE  `cdate` > CURRENT_DATE -30"); 

$result = mysql_query($query);

$res = mysql_fetch_assoc($result);
echo json_encode($res[c]);

mysql_free_result($result);
?>

然后使用 AJAX 将回显的结果传递给 JS 文件:

文件名:canvas.js

$(document).ready( function() {
    $(usersreport).click(function() {
        $.ajax({
            type: 'POST',
            url: 'js/SQLamountofusers.php',
            data: 'id=usersreport',
            dataType: 'json',
            cache: false,
            success: function(result) {

            var num = Number(result);

            { label: "Active",  y: num},
            { label: "Inactive",  y: 0  },

    });
});

现在这是我想要实现但不知道如何实现的目标:

我想将两个值传递给 canvas.js 文件,一个是活动用户(需要从数据库中查询一个,上面已经写过),另一个是非活动用户(需要另一个查询) -那么如何将两个结果放入 JS 文件中呢?

我应该使用其他查询创建另一个单独的 PHP 文件还是有其他方法来实现它?

【问题讨论】:

  • 我不确定我是否理解您的要求,但我最好的猜测是您想更新您的 SQL 以执行 GROUP BY 并返回每个组的计数。或者,您可以在 php 中执行两个查询以分别获取两个结果,或者甚至可以使用 UNION 进行单个查询。
  • 如果需要,您还可以创建一个包含两个单独查询结果的数组。请注意,$res[c] 不是有效的 PHP。

标签: javascript php mysql sql-server


【解决方案1】:

尝试将您的查询调整为:

<?php
$query = sprintf("SELECT
    COUNT(DISTINCT IF(cdate > CURRENT_DATE - 30, users.id, NULL)) AS c,
    COUNT(DISTINCT IF(cdate <= CURRENT_DATE - 30, users.id, NULL)) AS d
FROM applications
    JOIN users ON users.id = applications.id_m");

$result = mysql_query($query);

$res = mysql_fetch_assoc($query);
echo json_encode($res);

mysql_free_result($result);
?>

然后你可以调整你的 canvas.js 来拉取结果

$(document).ready( function() {
    $(usersreport).click(function() {
        $.ajax({
            type: 'POST',
            url: 'js/SQLamountofusers.php',
            data: 'id=usersreport',
            dataType: 'json',
            cache: false,
            success: function(result) {

            var num = Number(result.c);
            var num2 = Number(result.d);

           { label: "Active",  y: num},
           { label: "Inactive",  y: num2 },

     });
});

免责声明:我没有测试此代码,只是将其作为您可以尝试的潜在解决方案。

【讨论】:

  • 您的 SQL 查询和其余代码都运行良好,非常感谢您,虽然这可以在一个 SQL 查询中实现,但我不确定。
  • 非常感谢,非常感谢
【解决方案2】:

文件名:SQLamountofusers.php

<?php
$query = "SELECT COUNT( * ) as c
FROM  `applications` 
JOIN  `users` ON ( users.id = applications.id_m ) 
WHERE  `cdate` > CURRENT_DATE -30"; 

$result = mysql_query($query);

$res = mysql_fetch_assoc($result);
$data = array('active' => $res['c']);

$query2 = "SELECT ...";
$result2 = mysql_query($query2);
$res2 = mysql_fetch_assoc($result2);
$data['inactive'] = $res2['c']);
echo json_encode($data);
?>

文件名:canvas.js

$(document).ready( function() {
    $(usersreport).click(function() {
        $.ajax({
            type: 'POST',
            url: 'js/SQLamountofusers.php',
            data: 'id=usersreport',
            dataType: 'json',
            cache: false,
            success: function(result) {

            { label: "Active",  y: result.active},
            { label: "Inactive",  y: result.inactive},

    });
});

只需将第二个 sql 查询替换为您需要的查询即可。

编辑:基本上你可以通过 json 数组和对象。因此,您可以轻松传递任意数量的数字。用你需要的值准备 php 数组,然后 json_encode() 它,你会得到一个在 js 端有值的对象或数组。 如果您对没有键的 php 数组进行编码,例如 $arr = array(1,2,3);您将在 js 端获得数组。您可以将其引用为 a[0]、a[1] 等。 如果您对关联 php 数组进行编码,即使用 $arr = array('k1'=>1, 'k2'=>2); 之类的键你会在 js 端得到一个对象。并将其引用为 o.k1、o.k2 等。

【讨论】:

  • 非常优雅的解决方案,不幸的是我没有设法实现它。甚至无法调试它,因为控制台中没有任何错误。无论如何,非常感谢。
【解决方案3】:

尝试: $query = "SELECT COUNT( * ) as c FROM applications JOIN users ON ( users.id = applications.id_m ) WHERE cdate > CURRENT_DATE -30";

没有 sprintf();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-15
    • 2015-09-10
    • 2016-03-17
    • 2020-03-09
    • 2013-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多