PHP - Как я могу использовать SQL-оператор при условии, где - PullRequest
0 голосов
/ 10 октября 2018

Я хочу знать, как я могу использовать оператор подсчета sql в зависимости от его статуса.Когда я попытался повторить его, все статусы превратились в номер 1. Я хочу поместить его в цикл, а не делать оператор пять раз.

<?php
$statuses = array("In-process", "Approved", "Draft", "Approved" , "Rejected"); 

foreach ($statuses as $stat) {  
    $stmt = $db->prepare(
        "SELECT COUNT(status) FROM `m2_exception_requests`
         WHERE created_by= ? and   status = ?"
    ) or die($db->error);  

    $stmt->bind_param("ss", $user_id , $stat);
    $stmt->execute();
    $result = $stmt->store_result(); 

    if  ($stat = 'In-process') {
        $Inprocess1 =  $result;
    }
    if  ($stat = 'Approved') {
        $Approved1 =  $result;
    }
    if  ($stat = 'Draft') {
        $Draft1 = $result;
    }      
}

Ответы [ 3 ]

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

Вы можете использовать GROUP BY, чтобы получить количество записей в каждом статусе;ниже приведен простой SQL-запрос;вы конвертируете его в привязки параметров;

SELECT status, COUNT(status) FROM `m2_exception_requests` WHERE `created_by` = ? AND `status` IN ("In-process", "Approved", "Draft", "Approved1" , "Rejected") GROUP BY `status`
0 голосов
/ 10 октября 2018

Вот динамическое и безопасное решение для SQL-инъекций:

Это будет использовать предложения IN и GROUP BY для генерации ваших результатов.

$statuses = array("In-process", "Approved", "Draft", "Approved" , "Rejected");

$clause = implode(',', array_fill(0, count($statuses), '?')); //create your question marks
$types = 's' . str_repeat('s', count($statuses)); //create you bindings

$query = "SELECT COUNT(status) 
  FROM `m2_exception_requests`
  WHERE created_by = ? 
  AND status IN($clause)
  GROUP BY status";

$stmt = $db->prepare($query);
$stmt->bind_param($types, $user_id, ...$statuses);
$stmt->execute();
$resArr = $stmt->get_result()->fetch_all(MYSQLI_ASSOC);
if(!$resArr) exit('No rows');
var_export($resArr);
$stmt->close();

Удачи!

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

вы можете попробовать это.

<?php
$statuses = array("In-process", "Approved", "Draft", "Approved1" , "Rejected"); 

$statusVal = [];
foreach ($statuses as $stat) {  
    $stmt = $db->prepare(
        "SELECT COUNT(status) FROM 
            `m2_exception_requests`
            WHERE created_by= ? 
            and   status = ?"
    ) or die($db->error);  

    $stmt->bind_param("ss", $user_id , $stat);
    $stmt->execute();
    $count = $stmt->rowCount(); 

    $statusVal[$stat] = $count;
}

var_dump($statusVal);

вы получите такие значения

[
    "In-process" => 1,
    "Approved" => 2,
    "Draft" => 3,
    "Approved1" => 4,
    "Rejected" => 5
]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...