Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP][MySQL] Wyrzucanie 'starych' elementów z bazy danych., Lub chociaż nadanie im odpowiedniej wartości.
heaton124
post
Post #1





Grupa: Zarejestrowani
Postów: 21
Pomógł: 0
Dołączył: 8.12.2013

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


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
Go to the top of the page
+Quote Post
MateuszS
post
Post #2





Grupa: Zarejestrowani
Postów: 1 429
Pomógł: 195
Dołączył: 6.10.2008
Skąd: Kraków/Tomaszów Lubelski

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


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.


--------------------
O! Zimniok :P
Go to the top of the page
+Quote Post
heaton124
post
Post #3





Grupa: Zarejestrowani
Postów: 21
Pomógł: 0
Dołączył: 8.12.2013

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


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.

Ten post edytował heaton124 10.01.2014, 01:18:23
Go to the top of the page
+Quote Post
MateuszS
post
Post #4





Grupa: Zarejestrowani
Postów: 1 429
Pomógł: 195
Dołączył: 6.10.2008
Skąd: Kraków/Tomaszów Lubelski

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


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.


--------------------
O! Zimniok :P
Go to the top of the page
+Quote Post
heaton124
post
Post #5





Grupa: Zarejestrowani
Postów: 21
Pomógł: 0
Dołączył: 8.12.2013

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


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.
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 Aktualny czas: 21.08.2025 - 21:28