MYSQL Query TAKING место участия пользователя с количеством всех остальных участников
Я делаю сайт, где пользователи добавляют место, где они побывали.
Есть 4 основных стола
users (user_id,name )
places (place_id,type_id,place_name, city_id)
user_place (user_id,place_id, date )
city(city_id,city_name)
Теперь мне нужно одним запросом взять все места типа 2 (where type=2)
где участвуют данные пользователи (user_id=43 lets say)
с названием места, названием города и количеством ВСЕХ ДРУГИХ пользователей, которые также участвуют в том же месте... Вчера с одной книгой о MySQL я пришел к такой вещи
SELECT *
FROM `user_place` , `places`,(SELECT count(user_id)
from user_places
WHERE user_place.place_id = places.place_id) as count
WHERE user_place.place_id = places.place_id
AND user_place.user_id =53
Но это дает ошибку: Неизвестный столбец 'place.place_id' в 'where clause' И все еще нет идеи, как я могу также аккуратно прикрепить название места и название города к результату... Пожалуйста, помогите, если можете...
2 ответа
Решение
SELECT p.place_id, p.place_name, c.city, placeCount.Cnt
FROM places p
INNER JOIN user_place up ON p.place_id = up.place_id
INNER JOIN fa_user u ON up.user_id = u.id
INNER JOIN city c ON p.city_id = c.id
LEFT JOIN (
SELECT place_id, COUNT( DISTINCT user_id ) Cnt
FROM user_place
WHERE user_id <>53
GROUP BY place_id
)placeCount ON p.place_id = placeCount.place_id
WHERE up.user_id =53
LIMIT 0 , 30
Вы можете посмотреть на что-то вроде этого
SELECT u.user_id,
u.NAME,
p.place_id,
p.place_name,
c.city_id,
c.city_name,
placeCount.Cnt
FROM places p INNER JOIN
user_place up ON p.place_id = up.place_id INNER JOIN
users u ON up.user_id = u.user_id INNER JOIN
city c ON p.city_id = c.city_id LEFT JOIN
(
SELECT place_id,
COUNT(DISTINCT user_id) Cnt
FROM user_place
WHERE user_id <> 43
GROUP BY place_id
) placeCount ON p.place_id = placeCount.place_id
WHERE p.type_id = 2
AND up.user_id = 43