2013-07-20 3 views
0

J'ai un gros problème avec MySQL. Je veux écrire un script comme facebook newsfeed. Ma requête me renvoie 27 les mêmes enregistrements. Je ne sais pas pourquoi. Comment ça marche? Script affichant les messages écrits par moi, mes amis ou mon profil.Un enregistrement 27 fois

Mes tableaux: utilisateurs: id, nom, prénom

amis: ami1, Friend2, état, date

mur: update_id, auteur, to_profile, contenu , date, photos

Ma requête:

SELECT wall.update_id, wall.author, wall.to_profile, wall.content, wall.date, wall.photos, users.*, friends.sender_id, friends.friend_id, friends.status 
FROM 
    wall 
INNER JOIN friends ON 
    wall.author = friends.sender1 
    AND friends.friend2 = '".$_SESSION['id']."' 
    AND friends.status = '1' OR wall.author = '".$_SESSION['id']."' 
    OR wall.to_profile = '".$_SESSION['id']."' 
INNER JOIN users ON users.id = wall.author 
ORDER BY wall.date DESC 

Je veux aussi afficher le message écrit par les pages que j'ai aimé. Je crée des tables:

pages: page_id, page_name

page_likes: page_id, user_id, la date

et * pages_wall: ** like_id, page_id, user_id, la date

Comment connecter ceci à ma requête? Et (le plus important) comment réparer ma requête? Merci d'avance, Matthew

Répondre

0

Cela fait beaucoup de choses à se rejoindre. Essayez d'utiliser vos JOINs juste pour connecter les tables, puis utilisez WHERE pour réduire les résultats. Parce que dans l'état actuel des choses, ces salles d'opération ne fonctionnent pas comme vous le pensez probablement, elles en ont besoin autour d'elles.

Je pense que vous avez besoin de modifications structurelles à cette base de données pour qu'elle fonctionne bien dans le futur. J'ajouterais un champ d'identification à mes amis, même si du côté administrateur, vous voudrez gérer ces enregistrements.

De même, vous ne devriez pas interroger l'utilisateur. * Dans cette requête. Il semble que vous voulez sortir tous les paramètres de l'utilisateur ... pour chaque poteau mural. Cela va se débarrasser de "INNER JOIN utilisateurs sur users.id = wall.author" à la fin qui aidera. Obtenez cette information dans la requête avant d'appeler cet affichage mural.

SELECT * 
FROM users 
WHERE users.id = wall.author 
Questions connexes