Salut à tous !

Je désire créer une sorte de fil d'actualité, un peu comme facebook, qui contient l'information de plusieurs table.

Le problème, c'est que je ne sais pas du tout comment rejoindre plusieurs table et les classer par le datetime.

Prenons 2 tables en exemple:

-Users avec les champs created et updated. Le created qui sera fixé à la création du compte et l'updated si il change son mot de passe ou son email.
-Addresses avec les mêmes champs created et updated.

J'ai 2 tables avec 2 champs de date chacun et j'aimerais faire une requête qui me permettrait d'afficher dans l'ordre du temps:

Xavier vient de s'inscrire le XXX

José a ajouté son addresse le XXX

Xavier a mit à jour son profil le XXX

Xavier a ajouté son adresse le XXX

José a mit à jour son profil le XXX

Sargeras vient de s'inscrire le XXX

Xavier a mit à jour son addresse le XXX

Je pense que vous avez compris ce que je désire faire mais je n'ai que très peu d'idée pour pas dire aucune pour le moment donc je m'en remet à vous pour me donner quelque piste afin que je puisse me documenter.

Je développe sur cakephp 3 actuellement au cas où certains auraient des informations liées à me donner même si je devrais pouvoir m'en sortir si je savais comment le faire en language SQL.

Si j'avais une idée, ce serait de faire 4 requêtes différentes jointes avec le UNION mais resterait à savoir comment rendre commun la date à ORDER BY.

J'espère avoir été assez clair dans mon explication :D En tout cas, merci d'avance pour l'éventuel aide que vous pourrez m'apporter !

4 réponses


Grafikart
Réponse acceptée

2 solutions :

  • Créer une table activity qui va sauvegarder les dernières actions fait par tes users (j'opterais pour celle là)
  • Récupérer les résultats et essayer de jouer avec les collection pour se faire une collection qui regroupe les 2 (ça devient limité si tu veux regrouper bcp de choses)
Chuug
Auteur
Réponse acceptée

Table activity, c'est pas bête !

ça voudrait dire que ma table serait ainsi:

CREATE TABLE IF NOT EXISTS `activity` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_create` int(11) DEFAULT NULL,
`user_update` int(11) DEFAULT NULL,
`address_create` int(11) DEFAULT NULL,
`address_update` int(11) DEFAULT NULL,
`date` datetime NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

Chaque entrée aurait donc son idée dans le champs adéquat alors que les autres resteraient null ?

Moi j'ai eu une approche différente en partant du principe qu'un acteur fait une action, mais dans ton cas c'est encore plus simple

user_id
action_at, Date de l'action
action_type, 'address', 'login', '....'

Chuug
Auteur

Le truc c'est que ce n'était qu'un exemple plus haut. Je dois aussi afficher l'activité d'autres tables comme le début et la fin d'un évènement