2015-10-13 3 views
0

Итак, у меня есть этот запрос, который работает неплохо, но он не возвращает то, что я хочу.PHP Mysqli возвращает массив из JOIN (alias as array key)

SELECT acc.*, fin.* 
FROM consumers acc 
LEFT JOIN finances fin ON fin.uid = acc.uid 
WHERE acc.id = '$userID'; 

возвращает массив (в PHP), где ключ 0 и все столбцы (из обеих таблиц) находятся под тот же массив.

То, что я хочу достичь, - это получить 2 массива, 1 с колонками из первой таблицы и еще один с колонками со второй таблицы.

В основном я пытаюсь получить многомерный массив из 1 запроса.

+0

'account' должно быть' acc' – Barmar

+0

Нет никакого способа делать то, что вы хотите автоматически. Когда вы находитесь в цикле 'while ($ row = mysqli_fetch_assoc()), назначьте столбцы на два разных массива. – Barmar

+0

, несмотря на этот небольшой тип, когда я переписал запрос здесь, по-прежнему не работает. –

ответ

0

Разделить его на два массива после прочтения строки.

$row = mysqli_fetch_assoc($query); 
$acc = array($row['col1'], $row['col2'], ...); 
$fin = array($row['col6'], $row['col7'], ...); 

где col1, col2 , ... are the columns from потребитель , and col6 , col7 , ... are the columns from $ finances`.

способ сделать это без перечисления всех названий столбцов с array_slice()

$row = mysqli_fetch_assoc($query); 
$acc = array_slice($row, 0, $number_of_consumer_columns); 
$fin = array_slice($row, $number_of_consumer_columns, $number_of_finances_columns); 
$table3 = array_slice($row, $number_of_consumer_columns + $number_of_finances_columns, $number_of_table3_columns); 

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

+0

Если бы я хотел сделать это, я мог бы просто запускать отдельные запросы для каждой из таблиц. –

+0

Но тогда вам нужно будет сделать два запроса вместо одного. – Barmar

+0

Было бы еще короче, чем создание массивов, поскольку таблицы имеют по 25 столбцов каждый. –

0

Я придумал быстрое решение:

<?php 

      $tableData = array('account'  => 'consumers', 'finance'  => 'consumers_finance', 'household'  => 'consumers_household', 'media'   => 'consumers_media', 'medical'  => 'consumers_medical', 'shopping'  => 'consumers_shopping', 'social'  => 'consumers_social', 'technology' => 'consumers_technology', 'transport'  => 'consumer_transport', 'b2b'   => 'consumers_b2b', 'employment' => 'consumer_employment_status'); 

      $openAccount = array(); 

      foreach($tableData as $key => $table) 
      { 
       $whichWhere = $db->doQuery("SHOW COLUMNS FROM `$table` LIKE 'uid'"); 
       $whichWhere = (isset($whichWhere[0]['Field'])) ? 'uid' : 'id'; 

       $getDetails = $db->getArray("SELECT * FROM $table WHERE $whichWhere = '$userID'"); 

       if(isset($getDetails[0])) 
       { 
        $openAccount[$key] = $getDetails[0]; 
       } 
       else 
       { 
        $getDetails = $db->doQuery("SHOW COLUMNS FROM `$table`"); 

        foreach($getDetails as $column) 
        { 
         $openAccount[$key][$column[0]] = ''; 
        } 
       } 
      } 

?> 

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