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.
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
Au lieu de sous-sélectionner, vous devez utiliser join. – Marek