Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] UPDATE
Forum PHP.pl > Forum > Przedszkole
peter13135
chcę zrobić w swoim skrypcie forum możliwość usuwania tematów. napotkałem problem, mianowicie liczba postów użytkownika jest przechowywana w users.posts i nie wiem jak zaktualizować ich wartość.

to co do tej pory zrobiłem
1. pobieranie danych o temacie.
2. pobieranie id oraz autora postów które są w tym temacie i stworzenie dwóch tablic : $posts_id oraz $_autors_id które zawierają te dane.
3. kasowanie wszystkich postów które są w danym temacie ~
  1. DELETE FROM... WHERE id IN ( implode( ',', $posts_id ) )


i następnie chciałbym zaktualizować ilośc postów dla każdego usera, w tabeli $autors_id są id autorów postów.
można zrobić zapytanie
  1. UPDATE ... SET posts=posts-1 WHERE id IN ( implode( ',', $autors_id ) )
ale co jeśli ktoś napisał więcej niż 1 post w temacie ? w jaki sposób to rozwiązać ?
thek
Group by user i count postów smile.gif
EDIT: Jeśli nie rozumiesz. Zrób zapytanie, które tyczy danego tematu konkretnego i zrób grupowanie po id_autorów postów w nim zawartych i przy select jako jedno ze zwracanych pól zliczanie owych postów smile.gif Możesz od razu dać order by ta liczba. Całość po odbiorze możesz dać do2 tablic. Te, gdzie liczba postów jest równa 1 poślesz zapytaniem jakie proponowałeś, ze zmniejszeniem o 1. Pozostali muszą dostać osobne zapytania, które zmniejszą liczbę postów zgodnie z dokładną wartością. Równie dobrze możesz dzielenie pominąć i wszystkim dać osobne update.
peter13135
czyli mam robić update inne dla userów którzy napisali 1 post, inny dla userów z 2 postami itd. ? w sumie nie widzę lepszego rozwiązania ale czy to nie wpłynie ujemnie na optymalność ?
thek
Zaproponowałem to by zmniejszyć liczbę zapytań do bazy. Można przecież wysyłać każdemu osobno o ile zmniejszyć mu całkowitą liczbe postów. Ale można tablicę wynikową podzielić na "dodali jeden post" i "resztę". Ci z jednym postem byliby posłani jednym zapytaniem obejmującym id_userów w WHERE id IN, a nie osobnymi UPDATE dla każdego z nich.
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.