Tabelle Group_UsersFilter sql Datensätze zu mehreren Zeiträumen in codeigniter und mysql?
id | user_id | join_time | left_time
-----------------------------------------------
1 | 123 | 2017-05-29 15:26:00 | 2017-05-29 17:26:00
2 | 123 | 2017-05-29 19:00:00 | 2017-05-29 21:00:00
3 | 123 | 2017-05-29 21:30:00 | NULL
Tabelle Group_Message
id | Message | sender_id | message_time
1 | Hii | 456 | 2017-05-29 15:30:00
2 | tes | 123 | 2017-05-29 18:30:00
3 | why | 852 | 2017-05-29 22:30:00
i haben Funktionen wie Gruppennachricht. wo der Benutzer Gruppe verlassen oder beitreten kann.
Wann immer er ging oder Gruppe beitreten seine activity in Group_Users Tabelle gespeichert.
und wenn der Benutzer eine Nachricht sendet, wird sie in Group_Message mit der Zeit gespeichert.
Ich habe andere Feld wie group_id, aber ich habe es hier für Einfachheit entfernt.
Ich möchte, wenn Benutzer beitreten der Gruppe zu diesem Zeitpunkt zeigen ihm nur Nachrichten während seiner verbundenen Zeit.
z. Wenn der Benutzer 123 zu dieser Zeit der Gruppe beitritt, sieht er nur Nachrichten 1,3.
zum Zeitpunkt 2 Nachricht er ist nicht Mitglied der Gruppe.
Das ist meine alte Abfrage, die ich vor verwenden, wenn Benutzer kann er nicht wieder zusammenzubringen und nach links Gruppe alte Nachrichten sehen
$this->db->select('gm.*');
$this->db->from('group_message gm');
$this->db->where('gm.group_id',$id);
$this->db->where('gm.id NOT IN (select message_id from delete_group_message where user_id = '.$user_id.')',NULL,FALSE);
$this->db->where('gm.time >= (select join_time from group_users where user_id = '.$user_id.')',NULL,FALSE);
$this->db->where('gm.time <= (select left_time from group_users where user_id = '.$user_id.')',NULL,FALSE);
$this->db->order_by('time','DESC');
$query = $this->db->get();
$res = $query->result_array();
Warum eine Verbindung zwischen den beiden Tabellen nicht basierend auf message_time zwischen join_time und left_time (mit einer ifnull Funktion auf left_time bis jetzt())? –
@SloanThrasher Vielen Dank für Ihr Interesse, aber ich habe Funktionalität, wo Yser kann verlassen und sich mehrere Zeit, so dass wir mehrere Benutzerperioden haben und zeigen ihm keine Nachrichten, wenn Hi nicht Teil der Gruppe ist. zB hier können wir sehen, dass Benutzer nicht Teil der Gruppe zwischen 2017-05-29 17:26:00 bis 2017-05-29 19:00:00 und 2017-05-29 21:00:00 bis 2017-05-29 ist 21:30:00. Daher müssen wir keine Nachrichten anzeigen, die während dieser Zeit gesendet wurden. –
Genau/Das ist, was ein Join tun würde. –