2012-01-24 4 views
2

Ma structure de tables MySQL (3 tables)Obtenir des données de trois tables SQL

utilisateurs

id
nom d'utilisateur

images

id
user_id
l'image

user_follow

id
user_id
follow_id

J'essaie de faire requête qui me donne toutes les images de "images" table de moi (user_id = 3) et mes amis que je suis "user_follow" table

Maintenant requête et il me donne toutes les photos de l'utilisateur que je suis, je ne sais pas quels changements à ajouter pour retourner aussi mes images (mon user_id = 3). Tous les utilisateurs noms doivent être dans le nom d'utilisateur (pas id), le nom d'utilisateur est dans le tableau « utilisateurs »

$sql = "SELECT u.username, p.image, p.date 
    FROM users u, user_follow f, images p 
    WHERE f.user_id = 3 AND f.follow_id = u.id AND f.follow_id = p.user_id 
    ORDER BY p.date DESC"; 

le retourner:

[0] => Array 
    (
     [id] => 8 
     [image] => fsfsf 
     [date] => 2012-01-24 14:58:14 
    ) 

[1] => Array 
    (
     [id] => 7 
     [image] => first.jpg 
     [date] => 2012-01-24 14:42:27 
    ) 

[2] => Array 
    (
     [id] => 7 
     [image] => second.jpg 
     [date] => 2012-01-24 14:42:27 
    ) 

[3] => Array 
    (
     [id] => 6 
     [image] => the_last.jpg 
     [date] => 2012-01-24 01:49:45 
    ) 

utilisateurs et leurs images que je suivre, mais pas mes images de mon user_id

+0

si vous essayez d'obtenir « toutes les images de la table 'images de », alors où est la variable nom d'utilisateur entrent en jeu? – bowlerae

+0

Comme je le comprends, je vous comprends ici f.follow_id = u.id. Mes utilisateurs ont un identifiant dans la table des utilisateurs mais d'autres ont le même identifiant dans le champ user_id – Viktors

Répondre

2
SELECT 
    images.*, 
    users.username 
FROM images 
LEFT JOIN users ON images.user_id = users.id 
LEFT JOIN user_follow ON images.user_id = user_follow.follow_id 
WHERE images.user_id = 3 OR user_follow.user_id = 3 
ORDER BY images.date DESC 
+0

merci! fonctionne bien – Viktors

+0

aider votre pourcentage d'acceptation en acceptant la meilleure réponse. Les utilisateurs cesseront de vous aider si le niveau devient trop bas. – bowlerae

+0

wouah il a sauté de 10% à 64% :) – bowlerae

1
SELECT image 
FROM images 
WHERE user_id = 3 
OR user_id IN (
    SELECT follow_id 
    FROM user_follow 
    WHERE user_id = 3 
) 
ORDER BY date DESC;