MySQL JOIN GROUP

0

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

$query = "SELECT
            type.name, bonus.bonus_id, bonus.bonus_amount
          FROM
            bonuses bonus
          INNER JOIN
            bonus_type type
          ON
            type.group_id = ?
          AND
            bonus.bonus_type_id = type.bonus_type_id";

пример полученных данных

array(4) {
  [0]=>
  array(3) {
    ["name"]=>
    string(8) "personal"
    ["bonus_id"]=>
    string(1) "1"
    ["bonus_amount"]=>
    string(2) "20"
  }
  [1]=>
  array(3) {
    ["name"]=>
    string(7) "monthly"
    ["bonus_id"]=>
    string(1) "1"
    ["bonus_amount"]=>
    string(2) "20"
  }
  [2]=>
  array(3) {
    ["name"]=>
    string(8) "personal"
    ["bonus_id"]=>
    string(1) "2"
    ["bonus_amount"]=>
    string(2) "30"
  }
  [3]=>
  array(3) {
    ["name"]=>
    string(7) "monthly"
    ["bonus_id"]=>
    string(1) "2"
    ["bonus_amount"]=>
    string(2) "30"
  }
}

Я хочу, чтобы структура данных, отправленная обратно, имела следующий формат. Я пробовал группировать, но это только сокращает мои результаты. Любая точка в правильном направлении будет признательна. Я уверен, что мой запрос не соответствует формату, который я ищу, но в нем есть все данные, которые я ищу.

array(2) {
  ["personal"]=>
     array(2){ 
       [0] => array(2) {
             ["bonus_id"]=>
             string(1) "1"
             ["bonus_amount"]=>
             string(2) "20"
          }
       [1] => array(2) {
             ["bonus_id"]=>
             string(1) "1"
             ["bonus_amount"]=>
             string(2) "20"
          }
      }
    ["monthly"]=>
         array(2){ 
       [0] => array(2) {
             ["bonus_id"]=>
             string(1) "1"
             ["bonus_amount"]=>
             string(2) "20"
          }
       [1] => array(2) {
             ["bonus_id"]=>
             string(1) "1"
             ["bonus_amount"]=>
             string(2) "20"
        }
    }
 }
  • 0
    Вы хотите, чтобы ваша СУБД вернула вам вложенный набор записей? Вам нужно выполнить некоторую агрегацию в вашем SELECT с помощью json_array() и некоторые манипуляции со строками (я считаю). Кроме того, не имеет отношения, что предложение ON очень и очень странно. Вы стремились к перекрестному / декартовому продукту?
Теги:

1 ответ

0

Это невозможно с (стандартным) SQL, результатом всегда будет "плоская" таблица...

Вам нужен кусок кода, чтобы разбить плоские данные на структуру, которую вы хотите.

Все остальное, вероятно, является сложным, нестандартным усовершенствованием РСУБД.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню