2013-06-15 7 views
1

Я новичок в этом форуме с точки зрения публикации, как может показаться на этом вопросе. У меня возникают некоторые проблемы с тем, как я хочу, чтобы мои данные появлялись.mysql joins and groups

Итак, у меня есть 3 таблицы (я только показывать столбцы, которые я хочу):

посетителей:

center_id (where the visitor was) | state_id (where they came from) 

центры:

center_id | center 

состояния:

state_id | state 

здесь есть е запрос, который я использую

SELECT states.state, visitors.center_id, visitors.state_id, centers.center, COUNT(visitors.state_id) AS totalCount 
FROM visitors 
LEFT JOIN states ON states.state_id = visitors.state_id 
LEFT JOIN centers ON centers.center_id = visitors.center_id 
WHERE visitors.vdate = <some date> AND visitors.state_id <> '0' 
GROUP BY centers.center, visitors.state_id 

Это приводит следующий массив:

Array 
(
    [0] => Array 
     (
      [state] => Connecticut 
      [location_id] => 1 
      [state_id] => 8 
      [center] => Little River 
      [totalCount] => 1 
     ) 

    [1] => Array 
     (
      [state] => California 
      [location_id] => 5 
      [state_id] => 6 
      [center] => North Augusta 
      [totalCount] => 1 
     ) 

    [2] => Array 
     (
      [state] => Colorado 
      [location_id] => 5 
      [state_id] => 7 
      [center] => North Augusta 
      [totalCount] => 2 
     ) 
    [6] => Array 
     (
      [state] => Connecticut 
      [location_id] => 9 
      [state_id] => 8 
      [center] => Santee 
      [totalCount] => 2 
     ) 

    [7] => Array 
     (
      [state] => Virginia 
      [location_id] => 9 
      [state_id] => 51 
      [center] => Santee 
      [totalCount] => 1 
     ) 
) 

Это то, что я действительно хочу:

Array 
(
    [Little River] => Array 
     (
      [0] => Array 
      (
       [state] => Connecticut 
       [state_id] => 8 
       [totalCount] => 1 
      ) 
     ) 

    [North Augusta] => Array 
     (
      [0] => Array 
       (
       [state] => California 
       [state_id] => 6 
       [totalCount] => 1 
      ) 

      [1] => Array 
       (
       [state] => Colorado 
       [state_id] => 7 
       [totalCount] => 2 
      ) 
     ) 
     [Santee] => Array 
      (
      [0] => Array 
       (
       [state] => Connecticut 
       [state_id] => 8 
       [totalCount] => 2 
      ) 

      [1] => Array 
       (
       [state] => Virginia 
       [state_id] => 51 
       [totalCount] => 1 
      ) 
     ) 
) 

В конце концов я ставлю это в таблицу что выглядит примерно так:

__________________ 
|State | Count| 
------------------- 
|  Santee  | 
------------------- 
| Georgia | 5 | 
------------------- 
| Alabama | 10 | 
------------------- 
| North Augusta | 
------------------- 
| another | 7 | 
------------------- 

Извините за то, что я долгое время наматывался, но это был единственный способ, которым я мог бы это описать.

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

Любая помощь будет оценена по достоинству.

+0

Как вы выборки результатов в PHP? – vidit

ответ

0

Запрос может возвращать только двумерный (или менее) результат. Вам нужно будет проанализировать этот набор результатов, чтобы преобразовать его в дерево.

С PHP, действительно нет никаких трудностей:

foreach ($rawResultSet as $row) { 
    $finalResult[$row['center']][] = array(
     $row['state'], 
     $row['state_id'], 
     $row['totalCount'] 

    ); 
} 
+0

Спасибо за ответ. Я нашел то, что искал, и это было очень близко к тому, что вы рекомендовали. Тогда речь шла об использовании вложенных петлей foreach. Извините, у меня было бы 1+, но у меня недостаточно репутации. – user2488018