Можно ли считать два столбца в одном запросе
Скажем, у меня есть следующая структура таблицы:
t1
-------------
id // row id
userID_follower // this user is a follows another member
userID_following // other member that this user
Можно ли запустить один запрос для объединения двух следующих:
Спасибо.
Ответы
Ответ 1
В MySql вы можете использовать функцию SUM()
по условию, так как ложное условие будет равно 0
, а истинное значение будет равно 1
:
SELECT SUM(userID_follower = $myID) AS followerCount,
SUM(userID_following = $myID) AS followingCount
FROM t1
WHERE userID_follower = $myID
OR userID_following = $myID
Ответ 2
Чем больше решение Hoyle (ISO) будет использовать выражение Case:
Select Sum( Case When userID_follower = $myID Then 1 Else 0 End ) As followerCount
, Sum( Case When userID_following = $myID Then 1 Else 0 End ) As followingCount
From t1
Where userID_follower = $myID
Or userID_following = $myID
Ответ 3
Я рекомендую возвращать две строки с одним счетчиком для каждой строки вместо двух столбцов:
SELECT 'follower', COUNT(*) AS count FROM t1 WHERE userID_follower = ?
UNION ALL
SELECT 'following', COUNT(*) FROM t1 WHERE userID_following = ?
Это может показаться дегенеративным решением, но причина в том, что если userID_follower и userID_following индексируются, это может использовать индексы. Если вы попытаетесь получить результаты в двух столбцах, как показано в других ответах, они не могут использовать индексы и должны выполнять сканирование таблицы.
Другие советы, которые касаются вопроса:
- В этом случае нет преимущества использования COUNT (id).
- Вы должны использовать параметры SQL-запроса вместо интерполяции $myID в свой запрос.
Ответ 4
Я думаю, что что-то вроде этого должно работать:
select ownerID, count( distinct userID_follow), count(distinct userID_following) from t1 group by ownerID