Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] Masowa aktualizacja danych
Forum PHP.pl > Forum > Przedszkole
alkesz1718
Witam,
Mam pewien problem z masową aktualizacją danych w bazie danych z poziomu skryptu php.
Mam przykładowo tabelę XXXX_users z struktórami jak:
- user_id
- name
- user_group
- time_limit
itd ale nie są one ważne tylko te co podałem.
Na stronie użytkownicy mają różne grupy (user_limit), niektórzy z nich daną grupę mają na określony czas (time_limit) i np.w bazie mam tak:
user_id | name | user_group | time_limit
1 | Admin |1 |
2 | Kowalski |3| 1651789500
3 | Nowak | 4 |
4 | Somsiad | 3 | 1851789500

teraz potrzebuję że jeśli wartość time_limit jest więsze niż 0/NULL ale mniejsze niż aktualna data to wartość user_group zmieni się tylko dla tej 1 osoby.

Napisałem taki kod:
  1. if ($row['time_limit'] > 0 ){
  2. $date_now = date("Y-m-d H:i");
  3. $limit = $row['time_limit'];
  4. if ($date_now > $limit) {
  5. $db->query( "UPDATE " . PREFIX . "_users SET user_group = '4', time_limit = '' ");
  6. }
  7. }


Kod ogólnie działa ale zmienia mi wartość user_group dla wszystkich użytkowników i pytanie jak zrobić by nie zmieniało mi wartość wszystkim użytkownikom a tylko tym co posiadają wartość time_limit który się "skończył"
aras785
Tutaj wgl. nie masz warunku WHERE więc nie będzie działać


Dodaj w zapytaniu WHERE time_limit IS NOT NULL AND time_limit > 0 AND time_limit < $date_now
alkesz1718
Dodałem ale nic się nie dzieje, nawet teraz widzę że ten mój kod nie chce działać a wczoraj jeszcze zadziałał jakimś cudem.
Podejrzewam że data zapisywana w tabeli nie jest porównywalna do tego co mam pod $date_now

W bazie data zapisana jako: 1651850400 odpowiada dacie 2022-05-06 17:20 może trzeba jakoś zakodować $date_now by skrypt mógł porównywać zapisaną datę w bazie z aktualną datą i godziną
Salvation
To użyj pustego time() albo strtotime() zamiast date()
alkesz1718
Nadal nic :/
phpuser88
W bazie masz unix date więc w PHP nie spełnisz ostatniego warunku. Pamiętaj też, że warunki PHP nie określają warunków zapytania SQL więc warunek WHERE jest konieczny jak już zostało wspomniane wyżej. wink.gif
  1. if ($row['time_limit'] > 0 ){
  2. $date_now = date("Y-m-d H:i");
  3. $date_now = strtotime($date_now);//konwert na unix
  4. $limit = $row['time_limit'];
  5. if ($date_now > $limit) {//lub strtotime() > $limit
  6. $db->query( "UPDATE " . PREFIX . "_users SET user_group = '4', time_limit = '' WHERE ... ");
  7. }
  8. }
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.