Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Trigger - sprawdzanie poprzednich wierszy
Azek
post
Post #1





Grupa: Zarejestrowani
Postów: 57
Pomógł: 3
Dołączył: 28.12.2011

Ostrzeżenie: (0%)
-----


Mam nieskomplikowaną tabelę na wiadomości:

id| data | user | message
1 | 2019-01-10 11:45:21 | Alice | Czesc wszystkim
2 | 2019-01-10 11:58:21 | Bob | Czesc, Alicja. Jak leci?
3 | 2019-01-10 11:58:40 | Bob | Co robisz?
4 | 2019-01-10 11:58:56 | Alice | Ucze sie
5 | 2019-01-10 13:12:49 | Dany | Hej, jestescie?
6 | 2019-01-10 13:54:06 | Alice | Siema

Chciałbym zrobić wyzwalacz, który po dodaniu wiersza sprawdzi czy ktoś już wcześniej pisał, i jeśli różnica czasu pomiędzy ostatnimi wiadomościami jest mniejsza niż 10 sekund, skleiłby obie.
Przykład: dodaję nowy wiersz

7 | 2019-01-10 13:54:08 | Alice | Ja już jestem

Po dodaniu powinno:
1) Pobrać ostatnie dwie wiadomości od Alice
2) Sprawdzić różnicę dat
3) Jeśli różnica mniejsza niż 10 sekund, zaktualizować ostatni wiesz doklejając wiadomość z poprzedniego, a poprzedni usunąć.
Po wykonaniu tabela powinna wyglądać tak:

id| data | user | message
....
5 | 2019-01-10 13:12:49 | Dany | Hej, jestescie?
7 | 2019-01-10 13:54:08 | Alice | Siema\nJa już jestem


Znalazłem kod, który mógłby mi pomóc, ale prawdę mówiąc nie wiem jak wykonać punkt 2) Czy ktoś mógłby pomóc?

CREATE PROCEDURE kurs1 ()
BEGIN
/* Najpierw deklarujemy zmienne */
DECLARE koniec, j SMALLINT UNSIGNED; /* zmienna koniec ma wartosc NULL */
DECLARE suma, z FLOAT DEFAULT 0.0;
/* Potem deklarujemy kursor */
/* Zapytanie SELECT może być bardzo skomplikowane */
DECLARE k1 CURSOR FOR SELECT I, X FROM przebieg ORDER BY I;
/* Co zrobić gdy dojdziemy do ostatniego wiersza */
DECLARE CONTINUE HANDLER FOR NOT FOUND
SET koniec = 1;
/* Zakładamy tabelę tymczasową */
DROP TEMPORARY TABLE IF EXISTS RunningTotal;
CREATE TEMPORARY TABLE RunningTotal
(I SMALLINT UNSIGNED NOT NULL PRIMARY KEY,
X FLOAT, SumaNarastajaca FLOAT);
/* Otwieramy kursor */
OPEN k1;
/* Pętla wiersz po wierszu */
petla: LOOP
/* pobranie danych do kursora */
FETCH k1 INTO j, z;
/* wyjdź jeśli już skończyły się wiersze */
IF koniec = 1 THEN
LEAVE petla;
END IF;
/* oblicz i wstaw dane do tabeli tymczasowej */
SET suma = suma + z;
INSERT INTO RunningTotal VALUES (j,z,suma);
END LOOP petla;
/* koniec pętli po wierszach */
END;


Ten post edytował Azek 21.01.2019, 23:19:28
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
trueblue
post
Post #2





Grupa: Zarejestrowani
Postów: 6 807
Pomógł: 1828
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


A dlaczego chcesz sklejać wiadomości? Jeśli chcesz wyświetlić najświeższy wątek rozmowy, to nie musisz sklejać, bo wyciągniesz poszczególne wypowiedzi poprzez warunek WHERE (taki sam gdybyś chciał wyciągnąć cały sklejony wątek).
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 14.10.2025 - 03:34