2014-10-30 4 views
2

Я пытаюсь выполнить странный запрос. У меня есть таблица вроде этого:Добавить количество столбцов в запросе MySQL

стол Люди

----------------------- 
| id | name | family | 
+----+------+--------+ 
| 1 | Bob | Smith | 
+----+------+--------+ 
| 2 | Joe | Smith | 
---------------------- 

Я хочу, чтобы вернуть массив ассоциативный как этот

id : 1 
name : bob 
family : smith 
familySize : 2 

Так что-то вроде этого

"SELECT id, name, family, familySize FROM People" 

Как я могу получить там семейство? Имейте в виду, что мой запрос может иметь много семей, и я хочу, чтобы все они были возвращены.

спасибо.

+4

Использовать функцию агрегации 'COUNT()' MySQL. –

ответ

3

Вышеприведенные 2 ответы не будут работать с несколькими семьями.

Вы можете сделать что-то вроде этого:

SELECT id, name, family, familySize FROM People p1 
JOIN (SELECT COUNT(*) as familySize, family FROM People GROUP BY family) p2 
USING(family) 
+0

*« Эти два ответа не будут работать с несколькими семьями ». * - Я не думаю, что ваш ни. Я сомневаюсь, что OP имеет столбец с именем 'familySize'. –

+1

Мой ответ не ожидает колонки с именем familySize. –

+0

Как вы это называете, SELECT id, name, family, familySize' <=? –

1

Вы можете сделать это, как этот

SELECT, идентификатор, имя, семья, граф (идентификатор), как familySize от людей

1
 "SELECT id, name, family, count(family) as familySize FROM People group by 
     family" 
+4

Я не думаю, что у OP есть столбец под названием 'familySize' –

+1

Я отредактировал свой ответ @ Fred-ii- –

1

Я хотел бы упомянуть здесь о том, что если две или три семьи имеют одинаковую фамилию «Смит». Это не даст вам желаемых результатов.

Что я предлагаю вам при вставке данных в таблицу, назначают головную часть семейства, а все члены семейства имеют поле с именем family_ID, которое имеет первичный ключ в качестве значения family_head.

Это даст вам точные результаты с 1000 людьми. Сейчас у меня есть семейный портал с более чем 12k членами, и он отлично работает для меня.

Надеюсь, это поможет.

Смежные вопросы