Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][SQL][PHP]Usuwanie gdy data jest mniejsza od obecnej
Nidan23
post 1.06.2019, 18:51:28
Post #1





Grupa: Zarejestrowani
Postów: 101
Pomógł: 2
Dołączył: 26.04.2019

Ostrzeżenie: (10%)
X----


To tak, przy każdorazowym uruchomieniu skryptu do tabeli wprowadzana jest data obecna, gdy rekord jest nieaktualny to zwyczajnie zostaje stara data. Chciałbym usuwać takie rekordy w których data jest inna niż obecna, więc napisałem takie cudo:

  1. $czas = date("H:i");
  2.  
  3. $sql = "SELECT aktualizacja FROM klan WHERE nick = '".$nick."';";
  4. $result = $conn->query($sql);
  5.  
  6. if ($result->num_rows > 0) {
  7. while($row = $result->fetch_assoc()) {
  8. echo $row["aktualizacja"];
  9. if($row["aktualizacja"] < $czas)
  10. {
  11. $sql = "DELETE FROM klan WHERE tag='$tag'";
  12. $result = $conn->query($sql);
  13. if ($result->num_rows > 0) {
  14. echo "ok";
  15. }
  16. }
  17. }
  18. } else {
  19. echo "0 results";
  20. }
  21. }


Tylko, że nie działa, wyświetla godzinę aktualizacji, ale nie usuwa i wcale się chyba nie dziwię, bo jak ma porównać datę...


Liczę na kreatywne pomysły, nie gotowe rozwiązania smile.gif
Go to the top of the page
+Quote Post
viking
post 1.06.2019, 19:02:24
Post #2





Grupa: Zarejestrowani
Postów: 6 365
Pomógł: 1114
Dołączył: 30.08.2006

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


A czemu nie kasujesz od razu po czasie?
Delete... where czas < now()


--------------------
Go to the top of the page
+Quote Post
Nidan23
post 1.06.2019, 19:18:49
Post #3





Grupa: Zarejestrowani
Postów: 101
Pomógł: 2
Dołączył: 26.04.2019

Ostrzeżenie: (10%)
X----


Mógłbyś rozwinąć? Bo zrozumiałem, to jako usuwanie odrazu po wprowadzeniu, więc raczej źle heh. Jeśli przed wprowadzeniem, to niestety odpada, bo mam skrypt podliczający inne części tabeli i bez danych z tabeli przed nie wyliczy mi obecnych. Więc ponowię prośbę, czy mógłbyś rozwinąć o co chodzi.

Wiem, że kiedyś jak zaczynałem, to nie formatowałem daty ("H:i" lub "Y-m-d") ale teraz gdy to usunałem to dostawałem błąd, że oczekiwali tego sformatowania.

Nie formatowałem daty, no i dostawałem tylko ciąg cyfr, więc to mogłbym porównać, o to mi chodziło.
Go to the top of the page
+Quote Post
viking
post 1.06.2019, 19:22:37
Post #4





Grupa: Zarejestrowani
Postów: 6 365
Pomógł: 1114
Dołączył: 30.08.2006

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


Nie jestem wróżką. Jak nie opiszesz co robisz to skąd mam wiedzieć jak te dane wykorzystujesz i co tam za obliczenia są zawarte? Możesz jako trigger after insert jeśli oczywiście "wprowadzenie" to u ciebie oznacza.


--------------------
Go to the top of the page
+Quote Post
phpuser88
post 2.06.2019, 14:52:18
Post #5





Grupa: Zarejestrowani
Postów: 66
Pomógł: 1
Dołączył: 4.05.2019
Skąd: PHP5.6

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


Cytat(Nidan23 @ 1.06.2019, 19:51:28 ) *
To tak, przy każdorazowym uruchomieniu skryptu do tabeli wprowadzana jest data obecna, gdy rekord jest nieaktualny to zwyczajnie zostaje stara data. Chciałbym usuwać takie rekordy w których data jest inna niż obecna, więc napisałem takie cudo:
  1. $czas = date("H:i");
  2. ...
  3. if($row["aktualizacja"] < $czas)
  4. ...

Tylko, że nie działa, wyświetla godzinę aktualizacji, ale nie usuwa i wcale się chyba nie dziwię, bo jak ma porównać datę...


Piszesz o dacie, ale porównujesz czas. Zawsze będziesz miał inny czas niż obecny, więc chyba prościej jest usunąć całą zawartość bez zabawy w sprawdzanie.. wink.gif
Natomiast jeśli chcesz porównać konkretną datę, to możesz spróbować np.
  1. $dzis = date("Ymd");
  2. $kontrola = str_replace(".","", row["aktualizacja"]); #usuwa kropkę lub kreskę między datami jeśli jest
  3.  
  4. if ($kontrola < $dzis ) {
  5. delete;
  6. } else {
  7. ok;
  8. }

Go to the top of the page
+Quote Post
Nidan23
post 5.06.2019, 14:10:53
Post #6





Grupa: Zarejestrowani
Postów: 101
Pomógł: 2
Dołączył: 26.04.2019

Ostrzeżenie: (10%)
X----


Cytat(phpuser88 @ 2.06.2019, 15:52:18 ) *
Piszesz o dacie, ale porównujesz czas. Zawsze będziesz miał inny czas niż obecny, więc chyba prościej jest usunąć całą zawartość bez zabawy w sprawdzanie.. wink.gif
Natomiast jeśli chcesz porównać konkretną datę, to możesz spróbować np.
  1. $dzis = date("Ymd");
  2. $kontrola = str_replace(".","", row["aktualizacja"]); #usuwa kropkę lub kreskę między datami jeśli jest
  3.  
  4. if ($kontrola < $dzis ) {
  5. delete;
  6. } else {
  7. ok;
  8. }


Zrobiłem takie coś i gdzieś jest problem, bo w żadnej kombinacji nie działa, jakieś pomysły?
  1. $sql = "SELECT aktualizacja FROM klan WHERE tag = '$tag'";
  2. $result = $conn->query($sql);
  3. if ($result->num_rows > 0) {
  4. while($row = $result->fetch_assoc()) {
  5. $dzis = date("Hi");
  6. $kontrola = $row["aktualizacja"]; #usuwa kropkę lub kreskę między datami jeśli jest
  7. if ($kontrola === $dzis) {
  8. echo "ok";
  9. } else {
  10. $dzis = date("H:i");
  11. $sql = "INSERT INTO explayers (miejsce, liga, poziom, tag, nick , ranga, donated, received, roznica, puchary, aktualizacja, data, up)
  12. SELECT *
  13. FROM klan WHERE not aktualizacja = '$dzis'";
  14. $result = $conn->query($sql);
  15. $sql = "DELETE FROM klan WHERE not aktualizacja = '$dzis'";
  16. $result = $conn->query($sql);
  17. echo "kurwa mać";
  18. }
  19. }
  20. } else {
  21. echo "0 results";
  22. }
  23. }
Go to the top of the page
+Quote Post
miccom
post 19.06.2019, 19:53:05
Post #7





Grupa: Zarejestrowani
Postów: 493
Pomógł: 8
Dołączył: 7.07.2007
Skąd: Tychy

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


Datę zapisuje w bazie jako timestamp i porównuj normalne liczby: usuwasz wszystko co mniejsze niż timestamp(now) smile.gif


--------------------
Jeśli pomogłem- kliknij POMÓGŁ-przyda się ;)- jeśli piszę bzdury- pisz pod postami. Poprawię się.
PISZĘ POPRAWNIE PO POLSKU!
Go to the top of the page
+Quote Post
Nidan23
post 20.06.2019, 00:47:35
Post #8





Grupa: Zarejestrowani
Postów: 101
Pomógł: 2
Dołączył: 26.04.2019

Ostrzeżenie: (10%)
X----


Cytat(miccom @ 19.06.2019, 20:53:05 ) *
Datę zapisuje w bazie jako timestamp i porównuj normalne liczby: usuwasz wszystko co mniejsze niż timestamp(now) smile.gif


Problem już od tygodnia rozwiązany, poduczylem się SQL'a i użyłem "DELETE WHERE aktualizacja != $czas" i tyle
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 28.03.2024 - 16:03