Search code examples
phpmysqlrgraph

How to combine multiple query's into one?


I am running a line graph on RGraph framework, and I am using a SELECT COUNT statement for rejected, accepted, approved etc.....counting how many items was rejected or accepted etc and then dumping the query data into an array, However I am looking for an easier way to implement this query, instead of running a query on each unique row value, also thinking in the way if I have to encounter other column data besides rejected, accepted or etc....I wouldnt, my code doesnt seem very scalable then. Please help

So far, I am running a query for each keyword, hope my code explains this.

The final variable is what i am feeding to RGRAPH, This works fine as it is, however it isn't the right way, and not very scalable, should my row data change.

 <?php  



    $cxn = mysqli_connect("localhost","root","", "csvimport");

    $query = "SELECT COUNT(*) FROM table_1 WHERE conclusion = 'rejected'";

    $result = mysqli_query($cxn, $query) or die(mysqli_error($cxn));

    $display = mysqli_fetch_array($result);

    $rejected = $display[0];

    //echo $rejected;

    $query = "SELECT COUNT(*) FROM table_1 WHERE conclusion = 
              'accepted'";

    $result = mysqli_query($cxn, $query) or die(mysqli_error($cxn));

    $display = mysqli_fetch_array($result);

    $accepted = $display[0];

    //echo $accepted;


    $query = "SELECT COUNT(*) FROM table_1 WHERE conclusion = '-'";

    $result = mysqli_query($cxn, $query) or die(mysqli_error($cxn));

    $display = mysqli_fetch_array($result);

    $dash = $display[0];

    //echo $dash;


    $query = "SELECT COUNT(*) FROM table_1 WHERE conclusion = 
     'approved'";

    $result = mysqli_query($cxn, $query) or die(mysqli_error($cxn));

    $display = mysqli_fetch_array($result);

    $approved = $display[0];

    //echo $approved;



    $datarray = [$rejected, $accepted, $dash, $approved];

    print_r($datarray);
    $data_string = "[" . join(", ", $datarray) . "]";
    echo "<br>";
    print_r($data_string);

?>

Solution

  • You can just use GROUP BY and add the conclusion column to the result set, so

    SELECT conclusion, COUNT(*) as total
        FROM table_1 
        WHERE conclusion in ('rejected', 'accepted', '-', 'approved')
        GROUP BY conclusion
    

    Then retrieve each row of the result set

    $totals = [];
    while($row = mysqli_fetch_array($result))  {
        $totals [$row[0]] = [$row[1]];
    }
    

    and $totals will be an array something like

    array( 'accepted' => 12, 
           'approved' => 20...)
    

    If you want all of the conclusions, then just remove the WHERE conclusion in line and it will return all of the possibilities along with the count.