CTE для пересечения создают резервную копию иерархии?

У вашего определения класса есть некоторые проблемы. Вы используете очень старый стиль конструктора (который был удален из PHP5, в настоящее время конструктор должен называться __construct()). Кроме того, в вашем конструкторе много чего не должно быть, но это проблема дизайна и выходит за рамки.

Я собираюсь лишь слегка коснуться проблем ООП и попытаться решить основные специфические проблемы, которые возникают у вас при получении этих строк и печати этих значений:

class DoctorService {

    private $totalPatientsA = [];
    private $totalPatientsB = [];

    private $conn;

    public function __construct($conn) {

       $this->conn = $conn;

    }

    function fetchPatients {

        $doctor_type_query  = "SELECT user_type_detail, COUNT(user_type) AS 
    'datacount' FROM users GROUP BY user_type";
        $doctor_type_result = mysqli_query( $this->conn, $doctor_type_query );

        while ( $patients = mysqli_fetch_assoc( $doctor_type_result ) ) {
            $this->totalPatientsA[] = $patients['user_type_detail'];
            $this->totalPatientsB[] = $patients['datacount'];
        }
    }

    public function getTotalPatientsA() {
       return $this->totalPatientsA;
    }


    public function getTotalPatientsB() {
       return $this->totalPatientsB;
    }
}

С этим, теперь db Соединение объявляется за пределами вашего класса доктора и становится зависимостью для него, объявленным в конструкторе.

Чтобы использовать его, вы должны сделать что-то вроде:

// I'm assuming this defines `$conn`, this is not the cleanest approach but it works for your purposes.
require_once "dbconnection.php";

$doctor_service = new DoctorService($conn);

$doctor_service->fetchPatients();

echo implode(', ', $doctor_service->getTotalPatientsA()), "\n";
echo implode(', ', $doctor_service->getTotalPatientsB()), "\n";

Сначала вам потребуется определение соединения с БД, которое вводит $conn в область видимости, и добавьте его в свой класс DoctorService.

Вы вызываете $doctor_service->fetchPatients(), чтобы фактический запрос был выполнен.

Для извлечения пациентов вы вызываете каждый из получателей, и, поскольку они возвращают массив, вы передаете результат через implode, поэтому он преобразуется в строку.

14
задан David Segonds 25 February 2009 в 08:32
поделиться

1 ответ

А-ч, я понял это:

WITH Hierarchy(TaskID, [Subject], ParentID, IsProject, HLevel)
AS
(
    SELECT 
        TaskID, 
        [Subject], 
        ParentID ,
        IsProject,
        0 as HLevel
    FROM 
        Task 
    WHERE 
        TaskID = 59

    UNION ALL

    SELECT 
        SubDepartment.TaskID, 
        SubDepartment.[Subject], 
        SubDepartment.ParentID ,
        SubDepartment.IsProject,
        HLevel + 1
    FROM 
        Task SubDepartment
    INNER JOIN 
        Hierarchy ParentDepartment
    ON 
        SubDepartment.TaskID = ParentDepartment.ParentID 
)

SELECT 
    TaskID, 
    [Subject], 
    ParentID,
    IsProject,
    HLevel
FROM  
    Hierarchy
ORDER BY
    HLevel DESC
24
ответ дан 1 December 2019 в 12:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: