Drukowana wersja tematu

Kliknij tu, aby zobaczyć temat w orginalnym formacie

Forum PHP.pl _ Przedszkole _ [MySQL][SQL][PHP]Usuwanie gdy data jest mniejsza od obecnej

Napisany przez: Nidan23 1.06.2019, 18: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 = http://www.php.net/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. http://www.php.net/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. http://www.php.net/echo "ok";
  15. }
  16. }
  17. }
  18. } else {
  19. http://www.php.net/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

Napisany przez: viking 1.06.2019, 19:02:24

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

Napisany przez: Nidan23 1.06.2019, 19:18:49

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.

Napisany przez: viking 1.06.2019, 19:22:37

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.

Napisany przez: phpuser88 2.06.2019, 14:52:18

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 = http://www.php.net/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 = http://www.php.net/date("Ymd");
  2. $kontrola = http://www.php.net/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. }


Napisany przez: Nidan23 5.06.2019, 14:10:53

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 = http://www.php.net/date("Ymd");
  2. $kontrola = http://www.php.net/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 = http://www.php.net/date("Hi");
  6. $kontrola = $row["aktualizacja"]; #usuwa kropkę lub kreskę między datami jeśli jest
  7. if ($kontrola === $dzis) {
  8. http://www.php.net/echo "ok";
  9. } else {
  10. $dzis = http://www.php.net/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. http://www.php.net/echo "kurwa mać";
  18. }
  19. }
  20. } else {
  21. http://www.php.net/echo "0 results";
  22. }
  23. }

Napisany przez: miccom 19.06.2019, 19:53:05

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

Napisany przez: Nidan23 20.06.2019, 00:47:35

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

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)