Следующий запрос mysql выведет столбец имен пользователей и серию из 5 столбцов после каждого имени пользователя, которые являются результатом 5 подсчетов.SUM подсчетов для динамических таблиц как столбцов MYSQL
SELECT f.username,
(SELECT COUNT(id) FROM sites s WHERE s.username = f.username) site_count,
(SELECT COUNT(id) FROM banners b WHERE b.username = f.username) banner_count,
(SELECT COUNT(id) FROM favorites fa WHERE fa.username = f.username) favorite_count,
(SELECT COUNT(id) FROM social_posts so WHERE so.username = f.username) social_count,
(SELECT COUNT(id) FROM stream_updates st WHERE st.username = f.username) stream_count
FROM members f
WHERE f.username
IN (SELECT friend2 as username FROM list_friends WHERE friend1 = :user
AND friend2 <> :user)
OR f.username
IN (SELECT friend1 as username FROM list_friends WHERE friend2 = :user
AND friend1 <> :user)
OR f.username = :user
Пример ВЫВОД:
| username | site_count | banner_count | favorite_count | social_count | stream_count |
+----------+------------+--------------+----------------+--------------+--------------+
| user1 | 7 | 12 | 3 | 5 | 11 |
| user2 | 2 | 1 | 12 | 1 | 0 |
| user3 | 5 | 7 | 4 | 9 | 25 |
Что я надеюсь добиться для исхода сумма каждой строки:
| username | site_count | banner_count | favorite_count | social_count | stream_count |
+----------+------------+--------------+----------------+--------------+--------------+
| | 14 | 20 | 19 | 15 | 36 |
К сожалению, просто обернув их в SUM не будет сокращать это, я бы это было так просто. Это займет сумму каждого счета для каждого пользователя, что бесполезно. Например, если счетчик возвращает 5 для user1, делая сумму 5, не изменит результат. Кроме того, группа не будет работать, так как имя_файла и имя пользователя из инструкции IN не совпадают и не могут быть сгруппированы как таковые. Я попытался сделать группу по имени f.username, также попробовал группу по имени пользователя, и все это не изменилось. – Bruce
ok, тогда .. может быть простой способ сделать это, посчитать их из sql.if использовать php просто посчитать их в php –
Это может быть на самом деле способ пойти, но я надеюсь на решение на основе sql, поскольку я должен сделать соединение в любом случае для данных, и все данные индексируются, поэтому я хотел бы сделать это в mysql, если это возможно. :) – Bruce