Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Przechowywanie ocen w tabeli. Problem z pętlą.
adbacz
post
Post #1





Grupa: Zarejestrowani
Postów: 532
Pomógł: 24
Dołączył: 15.04.2011
Skąd: Kalisz

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


Mam system oceniania dla artykułów. Oceny zapisuję w osobnej tabeli z ocenami poza tabelą z artykułami. Każda ocena jest zapisywana w jednym wyniku oddzielona znakiem |;;|. Tak samo jest z adresami IP, do sprawdzania czy juz ten ktos ocenił dany artykuł.

Żeby obliczyć średnią albo sprawdzić czy już było ocenione, pobierałem jeden wynik, za pomocą explode() wszystko rozbijałem i operowałem na tablicy.

Moje pytanie brzmi, czy to jest dobre rozwiązanie? Teraz, przy robieniu porównywarki, chciałem porównywać też oceny wyświetlając je w tabeli. Wszystko wygląda tak, że wyświetlane jest wszystkow postaci tabeli na stronie, która generowana jest przez pętlę, i dla każdego wykonania pętli, pobierało z bazy day wynik z ocenami, rozbierało go, liczyło średnią i wyświetlało ocenę... tak, ale tylko przy pierwszym przejściu pętli.

Jest jakiś lepszy sposób przechowywania ocen? Może każdą w osobnym wyniku, ale czy to czasem nie marnotrawstwo przestrzeni dla DB? Albo to samo tylko, że zamiast w osobnej tabeli, to w tabeli razem z artykułami?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 5)
plej
post
Post #2





Grupa: Zarejestrowani
Postów: 264
Pomógł: 11
Dołączył: 9.05.2011
Skąd: Gdańsk

Ostrzeżenie: (10%)
X----


w jednej i łączyć je kluczem głównym czyli "id"
napisz sobie funkcje która odrazu będzie zliczała średnią ocenę i dodawała gotowy wynik do bazy:) albo nawet w jednej tabeli możesz mieć to:D
Go to the top of the page
+Quote Post
mortus
post
Post #3





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


Zdecydowanie najbardziej optymalne będzie przechowywanie ocen w osobnej tabeli w bazie danych. Jednak ważne jest to, jak to ocenianie wygląda. Jeśli oceniać mogą tylko dajmy na to zarejestrowani użytkownicy portalu, to nie ma sensu sprawdzać tutaj IP. Jeśli natomiast oceniać mogą wszyscy, to samo sprawdzenie IP nie wystarczy (niektórzy mogą mieć IP zewnętrzne, takie samo dla kilku, czy nawet kilkuset użytkowników sieci lokalnej lub WiFi). W obu przypadkach najlepiej będzie wykorzystać nową tabelę w bazie danych i nałożyć PRIMARY KEY na oba pola tabeli. Przykładowo:
  1. CREATE TABLE `oceny` (
  2. `article_id` int(10) UNSIGNED NOT NULL,
  3. `user_id` int(10) UNSIGNED NOT NULL,
  4. PRIMARY KEY (`article_id`,`user_id`)
  5. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci;
Go to the top of the page
+Quote Post
adbacz
post
Post #4





Grupa: Zarejestrowani
Postów: 532
Pomógł: 24
Dołączył: 15.04.2011
Skąd: Kalisz

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


Dać sobie spokój z funkcją explode()? Co do oceniania to mogą oceniać tylko zarejestrowani, więc w sumie masz rację mortus.
Go to the top of the page
+Quote Post
mortus
post
Post #5





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


Cytat(adbacz)
Dać sobie spokój z funkcją explode()?
Zdecydowanie tak.
Go to the top of the page
+Quote Post
adbacz
post
Post #6





Grupa: Zarejestrowani
Postów: 532
Pomógł: 24
Dołączył: 15.04.2011
Skąd: Kalisz

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


Dzięki Panowie, teraz jest wszystko w porządku smile.gif
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: 20.08.2025 - 01:10