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
Другие вопросы по тегам