Я пытаюсь отобразить двух конкретных людей (доход пары) в таблице (с помощью цикла foreach PHP). Каждый человек должен быть показан в столбце, а доход — в каждой строке.
Чтобы соединить пару/людей, я создал таблицу j_b_controller, которая может объединять пары с помощью joint_budget_id. В j_b_controller также есть столбец position_order, позволяющий указать, где разместить person1 и person2. У Person1 позиции_order = 1 и person2 = 2.
Когда одна из учетных записей входит в систему, я начинаю этот сеанс
$_SESSION['budget_id'] = $jointbudget['joint_budget_id']; Пример: таблица доходов выглядит так
[*]У человека1 есть доход 1, доход 2, доход 3 и доход 5. [*]человек2 имеет доход1 [*]Сумма дохода1 для каждого человека неодинакова. [*]Каждый доход имеет свой собственный row_type_id, поэтому income1 имеет row_type_id = 1.
Таблица доходов
id имя account_id сумма примечание row_type_id date_added 1 Доход1 1 14000,99 1 2022-01-01 00:00:00 2 Доход2 1 1900,99 2 2022-01-03 00:00:00 3 Доход3 1 3269,99 3 2022-01-06 00:00:00 4 Доход1 2 5200,99 1 2022-01-01 00:00:00 5 Доход5 1 130,99 5 2022-01-01 00:00:00
Таблица j_b_controller выглядит следующим образом
[*]У пользователя 1 значения Joint_budget_id = 1 и Position_order = 1. [*]У Person2 значения Joint_budget_id = 1 и Position_order = 2.
Таблица j_b_controller
id account_id joint_budget_id принять_приглашение position_order date_added 1 1 1 1 2022-02-10 11:45:22 2 2 1 2 2022-02-11 11:45:24
Все должно отображаться в таблице HTML (цикл PHP foreach)
ORDER BY row_type_id
Человек 1 Человек 2 Доход1 Доход1 Доход2 Пусто Доход3 Пусто Доход5 Пусто
Надеюсь, вы видите картинку ниже

Два SQL-запроса, которые следует соединить/объединить:
//Выбираем доходы от человека с Position_order = 1 $stmt = $pdo->prepare('ВЫБЕРИТЕ i.id, i.name, i.amount AS p2_amount, i.row_type_id ИЗ доходов i ПРИСОЕДИНЯЙТЕСЬ к j_b_controller jb НА i.account_id = jb.account_id И jb.joint_budget_id = ? И jb .position_order = **1** ORDER BY i.id И i.row_type_id ASC'); $stmt->execute([$_SESSION['budget_id']]); $income_rows_122s = $stmt->fetchAll(PDO::FETCH_ASSOC); и
//Выбираем доходы от человека с Position_order = 2 $stmt = $pdo->prepare('ВЫБЕРИТЕ i.id, i.name, i.amount AS p2_amount, i.row_type_id ИЗ доходов i ПРИСОЕДИНЯЙТЕСЬ к j_b_controller jb НА i.account_id = jb.account_id И jb.joint_budget_id = ? И jb .position_order = **2** ORDER BY i.id И i.row_type_id ASC'); $stmt->execute([$_SESSION['budget_id']]); $income_rows_122s = $stmt->fetchAll(PDO::FETCH_ASSOC); Я уже пытался использовать UNION и пытался сделать подзапрос
Мой подзапрос на данный момент является закрытым, но с помощью подзапроса я могу вернуть только 1 строку для person2.. и повторяется столько раз, сколько у Person1 есть доходы.
$stmt = $pdo->prepare('SELECT i.*, i.amount AS p1_amount, (ВЫБЕРИТЕ сумму ИЗ доходов i ПРИСОЕДИНЯЙТЕСЬ к j_b_controller jb ON i.account_id = jb.account_id И jb.joint_budget_id = ? И jb.position_order = 2 ЗАКАЗ ПО i.id И i.row_type_id ASC) КАК p2_amount ОТ доходов i ПРИСОЕДИНЯЙТЕСЬ к j_b_controller jb ON i.account_id = jb.account_id И jb.joint_budget_id = ? И jb.position_order = 1 ЗАКАЗ ПО i.id И i.row_type_id ASC'); $stmt->execute([$_SESSION['budget_id'], $_SESSION['budget_id']]); $income_rows_1s = $stmt->fetchAll(PDO::FETCH_ASSOC); Мой foreach выглядит так
Объектов нет [/url] Результат выглядит так (картинка)

Для пользователя 2 доход 1 должен отображаться только 1 раз, а остальное должно быть пустым. Если бы у человека2 был доход 6, то строка дохода6 для человека1 была бы пустой, а затем у человека2 была бы сумма дохода6 в таблице.
Надеюсь, это имеет смысл. Я НЕ опытный/образованный программист, но мне нравится немного программировать в свободное время.