PHP и MySQL разные запросы - PullRequest
       0

PHP и MySQL разные запросы

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

У меня следующий запрос.Когда я запускаю запрос прямо в MySQL, я получаю всю информацию, но когда я выполняю тот же запрос в моем PHP-скрипте, он пропускает некоторую информацию.Сначала я выполнил запрос в MySQL, чтобы убедиться, что я получил все, что мне нужно, а затем скопировал запрос в мой php-скрипт.Может ли кто-нибудь помочь, пожалуйста:

$get_attendance_profile_stmt = $conn->prepare('SELECT
p_info.fname AS \'First name\',
p_info.lname AS \'Lastname\',
stud_info.t_belt_id,
t_b.short_descr,
t_b.long_descr, 
stud_info.h_belt_id,
h_b.short_descr,
h_b.long_descr,

AB.*,
ROUND(
    (
        AB.Considered_Attended / AB.Classes_Tought * 100
    ),
    0
) AS \'Attendance %\'
FROM
(
SELECT
    student_id,
    SUM(
        CASE WHEN attendance_reason = 1 THEN 1 ELSE 0
    END
    ) AS \'Sick\',
    SUM(
    CASE WHEN attendance_reason = 2 THEN 1 ELSE 0
    END
    ) AS \'Injured\',
    SUM(
    CASE WHEN attendance_reason = 3 THEN 1 ELSE 0
    END
    ) AS \'Work\',
    SUM(
    CASE WHEN attendance_reason = 4 THEN 1 ELSE 0
    END
    ) AS \'School\',
    SUM(
    CASE WHEN attendance_reason = 5 THEN 1 ELSE 0
    END
    ) AS \'Did not attend\',
    SUM(
    CASE WHEN attendance_reason = 6 THEN 1 ELSE 0
    END
    ) AS \'Present\',
    SUM(
    CASE WHEN attendance_reason != 5 THEN 1 ELSE 0
    END
    ) AS \'Considered_Attended\',
    MAX(DateCounter) AS \'Classes_Tought\'
    FROM
    attendance a
    JOIN(
    SELECT COUNT(
        DISTINCT CONVERT(creation_date, DATE)
    ) AS DateCounter
    FROM
    attendance
    WHERE
    creation_date <= (SELECT DATE_SUB(NOW(), INTERVAL -6 MONTH))
    ) DT
    WHERE
    creation_date <= (SELECT DATE_SUB(NOW(), INTERVAL -1 MONTH))
    GROUP BY
    student_id
    ) AB
    JOIN student_info stud_info ON
    stud_info.student_id = AB.student_id
    JOIN users u ON
    stud_info.uid = u.uid
    JOIN personal_info p_info ON
    u.uid = p_info.uid
    LEFT JOIN t_belts t_b ON 
    stud_info.t_belt_id = t_b.t_belt_id
    LEFT JOIN h_belts h_b ON
    stud_info.h_belt_id = h_b.h_belt_id
    WHERE
    u.account_status = \'Active\'');

Мой вывод, выполняющий запрос внутри MySQL, выглядит следующим образом: enter image description here

Вывод запроса в php выглядит следующим образом: enter image description here

Любая помощь будет принята с благодарностью.

1 Ответ

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

PHP массив должен иметь уникальные индексы.Ваш запрос возвращает 2 столбца с одинаковыми именами, поэтому вторые значения - это то, что вы получаете (они перезаписывают первое во время присваивания, простой пример https://3v4l.org/sbs41)).Как видно на скриншоте, ваши вторые столбцы пусты.Используйте псевдоним в первых столбцах (или во втором), чтобы ваши индексы в PHP были уникальными.Например,

SELECT
p_info.fname AS \'First name\',
p_info.lname AS \'Lastname\',
stud_info.t_belt_id,
t_b.short_descr,
t_b.long_descr, 
stud_info.h_belt_id,
h_b.short_descr as short_descr_dontcare,
h_b.long_descr as long_descr_dontcare

или

SELECT
p_info.fname AS \'First name\',
p_info.lname AS \'Lastname\',
stud_info.t_belt_id,
t_b.short_descr  as short_descr_real,
t_b.long_descr as long_descr_real, 
stud_info.h_belt_id,
h_b.short_descr,
h_b.long_descr

. При последнем подходе вам нужно изменить индексы в вашем массиве PHP с помощью _real.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...