2014-09-09 4 views
0

Ok maintenant, pour un projet de réseau social sur lequel je travaille Je veux mettre en place une fonctionnalité qui montre toute l'activité qui s'est produite sur le site depuis la dernière connexion d'un utilisateur .Essayer de sélectionner plusieurs tables mysql après une certaine date

J'ai deux tables, une pour messages et un pour réponses à des postes.

Messages:

+----------+----------------+------+-----+---------+----------------+ 
| Field | Type   | Null | Key | Default | Extra   | 
+----------+----------------+------+-----+---------+----------------+ 
| id  | int(11)  | NO | PRI | NULL | auto_increment | 
| username | varchar(256) | YES |  | NULL |    | 
| comment | varchar(10000) | YES |  | NULL |    | 
| date  | datetime  | YES |  | NULL |    | 
| likes | int(11)  | YES |  | 0  |    | 
| deleted | int(4)   | YES |  | 0  |    | 
+----------+----------------+------+-----+---------+----------------+ 

Réponses:

+----------+----------------+------+-----+---------+----------------+ 
| Field | Type   | Null | Key | Default | Extra   | 
+----------+----------------+------+-----+---------+----------------+ 
| id  | int(11)  | NO | PRI | NULL | auto_increment | 
| post  | int(11)  | NO |  | NULL |    | 
| username | varchar(256) | YES |  | NULL |    | 
| reply | varchar(10000) | YES |  | NULL |    | 
| date  | datetime  | YES |  | NULL |    | 
| deleted | int(4)   | YES |  | 0  |    | 
+----------+----------------+------+-----+---------+----------------+ 

(Le poste dans la table Réponses liens à l'identifiant du poste, il répond sur - désolé pour toute confusion)

La date est définie dès qu'ils envoient le post ou la réponse.

Ce que j'essaie de faire est d'obtenir tous les messages et les réponses qui ont été faites alors que l'utilisateur n'était pas sur le site pour montrer l'activité du site pendant leur absence.

Essayer de générer quelque chose comme

USERNAME1 affiché sur le tableau principal USERNAME2 a commenté un message par USERNAME1

Quelque chose comme ça. Avec les postes et les réponses dispersés en fonction de leur date.

donc j'allais interroger à partir de ces tableaux:

SELECT * FROM replies 
WHERE date > arbitrary_date AND deleted=0 
UNION ALL 
SELECT * FROM posts 
WHERE date > arbitrary_date AND deleted=0 
ORDER BY date DESC; 

Je suis juste essayer d'obtenir un résultat, triés par date, de toutes les réponses et les messages afin que je puisse leur montrer dans l'ordre par quand ils ont été créés avec le plus récent sur le dessus. Mais pour une raison quelconque, je ne peux pas comprendre comment obtenir le bon résultat. Soit les données sont brouillées sur la requête, soit elles sont complètement fausses.

La requête est la partie avec laquelle j'ai vraiment besoin d'aide. Je ne suis pas très bon avec SQL et je n'arrive pas à comprendre cela malgré une recherche approfondie.

Si vous avez besoin de clarification, s'il vous plaît faites le moi savoir. Je serai plus qu'heureux de donner plus de détails.

Répondre

1

Il suffit de les faire revenir les mêmes colonnes, par exemple:

SELECT CONCAT(username, ' posted on ', board_name_column) as msg FROM posts ... 
UNION 
SELECT CONCAT(username, ' commented on ', board_name_column) as msg FROM replies JOIN posts ON replies.post = post.id ... 

Une autre option:

SELECT 'post' AS type, username, board_name_column FROM posts ... 
UNION 
SELECT 'reply' AS type, username, board_name_column FROM replies JOIN posts ON replies.post = post.id ... 
+0

SELECT CONCAT (posts.username, 'affiché sur la carte principale!) Comme msg, la date FROM posts WHERE date> '2014-09-06' AND deleted = 0 UNION SELECT CONCAT (replies.username, 'commenté un message par', (SELECT nom d'utilisateur FROM messages WHERE id = replies.post)) comme msg, date FROM réponses WHERE date> '2014-09-06' AND deleted = 0 ORDER BY date DESC; Cela a fini par fonctionner. :) Merci beaucoup! – Kilenaitor

+0

Au lieu de sous-sélectionner, vous devez utiliser join. – Marek

Questions connexes