Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL] Wyrzucanie 'starych' elementów z bazy danych.
Forum PHP.pl > Forum > Przedszkole
heaton124
Witam, cześć.
Mam spory problem z 'zaprogramowaniem' strony, aby ODPOWIEDNIO robiła następującą rzecz:
Do tabeli (bazy danych) dodawany jest element z wartością z datą PRZYSZŁĄ -> gdy minie ta data, cały rekord znika z tabeli.

Tutaj skrócony kod oraz moje solucje które 'próbowałem' stosować.
  1. // Na start zliczam elementy, by 'obliczyć' ilość stron (do paginacji)
  2. $sql = "SELECT COUNT(*) FROM list WHERE visibility='visible'";
  3. $result = mysql_query($sql, $conn) or trigger_error("SQL", E_USER_ERROR);
  4. $r = mysql_fetch_row($result);
  5.  
  6. $sql2 = "SELECT /* JAKIEŚ WARTOŚCI */ FROM list WHERE visibility='visible' ORDER BY signup LIMIT $offset, $rowsperpage";
  7. $result2 = mysql_query($sql2, $conn) or trigger_error("SQL", E_USER_ERROR);
  8. while ($rekord = mysql_fetch_assoc($result2)) {
  9. // TUTAJ ZAWARTOŚĆ TABELI
  10. }


No i teraz tak. Ja osobiście próbowałem to zrobić w ten sposób, że przerabiałem tak while:
  1. while ($rekord = mysql_fetch_assoc($result2)) {
  2. if ($rekord['signup'] >= date("Y-m-d") { // TUTAJ ZAWARTOŚĆ TABELI
  3. }}


Ta metoda jednak jest zupełnie beznadziejna, bo raz - niby wyniki 'stare' się już nie pokazały, ale nadal ilość stron pozostawała taka sama. A dwa - wyników fizycznie też tam już nie było, ale nadal zajmowały swoje pola - funkcja while nadal je 'wyrzucała', ale dopiero if ich nie wyświetlało.

Zmiennych zdefiniowanych później też nie mogę użyć na początku kodu, więc nie mam pojęcia jak to zrobić już w ogóle. Jestem w kropce.
Błagam o pomoc sadsmiley02.gif
MateuszS
Musisz wszystko robić na podstawie zapytań do bazy. Czy jest sens trzymać w tej samej tabeli przeterminowane wpisy? Nie lepiej je przenosić lub usuwać? W zapytaniu SQL pobierz tylko te, które mają datę większą od aktualnej. Kodu Ci nie napiszę bo tak z palca to nie pamiętam, ale na pewno sie da i na pewno w necie jest masa przykładów.
heaton124
Przed chwilą jakichś bzdur napisałem, ale już usunąłem posta. Wracając do tematu:

Nie rozumiem tego, ale coś się rusza.. Kombinowałem teraz wpisując na start chociaż taką linijkę:
  1. $sql = "SELECT COUNT(*) FROM list WHERE visibility='visible' AND signup >= date('Y-m-d')";

ale już tu pojawiają się jakieś dziwne rzeczy. Pojawia się tylko i wyłącznie strona oznaczona przez mnie w paginacji jako 'ostatnia', mimo że wyników jest więcej niż na tą tylko jedną stronę

Mimo to próbowałem dalej, żeby zobaczyć co wyjdzie. 'Ulepszyłem' tak samo zmienną $sql2 jak $sql:
  1. $sql2 = "SELECT /* JAKIEŚ WARTOŚCI */ FROM list WHERE visibility='visible' AND signup >= date('Y-m-d') ORDER BY signup LIMIT $offset, $rowsperpage";

Teraz nie dość że wyświetla się tylko tamta jedna ("ostatnia") strona, to jeszcze nie ma na niej żadnych wyników.

!!EDIT!!:
Ogólnie problemem najważniejszym tymczasowo chyba jest to, że zmieniając w ten sposób $sql2 po prostu wszystkie wyniki 'znikają', nawet gdy zostawię SELECT COUNT tak jak było poprzednio. Stron jest liczba odpowiednia, ale wyników nie ma żadnych na żadnej stronie.
MateuszS
Zamiast daty wrzucaj wartosc time() wygasniecia a potem przy zaPytaniu sprawdz czy data w bazie jest wieksza od Obecnego czasu. Funkcje pobierajaca czas wsekundach w mysqlu musisz wygooglac.
heaton124
Oczywiście wszystko działa. Mimo, że banalny błąd to dla potomnych:
Funkcja "date()" oczywiście nie działa w sql'u. Ja osobiście użyłem CURDATE(), ale opcji jest multum.

Dzięki wielkie, MateuszS.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.