2009-12-28 2 views
0

Я делаю сайт, на котором пользователи добавляют место, где они были посещены.MYSQL Query ПРИНИМАЕТ место участия пользователя с количеством всех других участников

Существует 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 

Но его дает ошибку: Неизвестный столбец " places.place_id 'in' where clause ' И до сих пор нет идеи, как я могу также прикрепить имя места и название города к результату ... Пожалуйста, помогите, если вы можете ...

ответ

0
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 
1

Вы можете посмотреть на что-то как этот

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 
+0

у вас есть ошибка в вашем SQL синтаксиса; проверьте руководство, которое соответствует версии сервера MySQL для правильного синтаксиса, чтобы использовать вблизи «[USER_ID], u.NAME, p.place_id, p.place_name, » в строке 1 Я получаю это, когда я вхожу ваш заданный вопрос ... –