2009-12-28 68 views
0

我正在製作一個網站,用戶添加他們訪問過的地方。MYSQL查詢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 

但它給錯誤:未知列' 'where.End'在'條款' 仍然沒有想法我怎麼能巧妙地附上地名和城市名稱的結果... 請幫助,如果你可以...

回答

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 我得到這個,當我進入你給定的QUERY ... – 2009-12-28 12:28:13