2009-12-28 41 views
0

Je crée un site Web où les utilisateurs ajoutent l'endroit où ils ont visité.MYSQL Query PRENDRE la place de la participation de l'utilisateur avec la quantité de tous les autres participants

Il y a 4 tables principales

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) 

Maintenant, je dois prendre avec une requête tous les endroits qui sont le type de 2 (where type=2) où les utilisateurs donnés participent (user_id=43 lets say) avec le nom du lieu, le nom de la ville et la quantité de tous les autres utilisateurs qui participent également au même endroit ... hier avec un livre sur MySQL je suis venu à une telle chose

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 

Mais son erreur donnant: Unknown column ' places.place_id » dans « où la clause » Et encore aucune idée comment puis-je joindre aussi intelligemment le nom du lieu et le nom de la ville pour le résultat ... S'il vous plaît aider si vous le pouvez ...

Répondre

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

Vous pouvez regarder quelque chose comme celui-ci

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

Vous avez une erreur dans votre syntaxe SQL; consultez le manuel qui correspond à votre version du serveur MySQL pour la bonne syntaxe à utiliser à proximité [USER_ID], u.NAME, p.place_id, p.place_name, 'à la ligne 1 je reçois quand je rentre votre question donnée ... –