如何从SQL数据库中检索两个结果

时间:2016-05-25 21:40:20

标签: javascript php mysql sql-server

我使用CPanel将PHP服务器与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文件传递两个值,一个是活动用户(需要一个来自DB的查询,上面已经写过),另一个是非活动用户(需要另一个查询) - 那么如何在JS文件中获得两个结果呢?

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

3 个答案:

答案 0 :(得分:0)

尝试将查询调整为:

<?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 },

     });
});

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

答案 1 :(得分:0)

文件名: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方面值为的对象或数组。 如果你编码没有像$ arr = array(1,2,3)这样的键的php数组;你将获得js方面的数组。您可以将其引用为[0],[1]等。 如果编码关联的php数组,即使用$ arr = array('k1'=&gt; 1,'k2'=&gt; 2)等键;你将在js方面获得一个对象。并将其引用为o.k1,o.k2等。

答案 2 :(得分:-1)

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

没有sprintf();