Jak zrobic system komentarzy ?

0

Ostatnio robilem system komentarzy w php tylko nie smiejcie sie ;)
Bylo tak:
tabelka o nazwie GT
w tabelce sa pola ID,NAGLOWEK,TRESC
wpisuje tam jakas tresc i tworzy sie automatycznie ID=1
wiec musze stworzyc tabelke GT1
gdzie sa pola TRESC,NICK
jesli w tabelce GT wpisze jakis temat do skomentowania ktorys tam
np ID=7 to musze zrobic tabelke GT7
z polami TRESC, NICK i z tych tabelek GT1..GT7 pobieram odpowidzi jakie byly do tematu z tabelki GT w ktorej to temat ma odpowiedni ID
A nie da sie jakos tego zrobic profesjonalnie ? zeby nie robic tysiac tabelek bo sie juz gubie

0

lol
to wszystko w jednej tabeli z dodatkowym polem - nazywa się to relacja.

0

lol lol ale tak moze jakis mini opis tak w skrocie PROSZE :)

0

masz udostępnione źródła kojota - zerknij jak to jest tam zrobione (jaka jest struktura tabel i jak są z nich wyciągane dane), bo nie chce mi się tłumaczyć tego samego kolejny raz.

0

eee, przepraszam ale kompletnie nic nie kumam z tego Twojego opisu...

Zrob to tak (albo zrob jak chcesz ;P ):

  1. Tabela z newsami/artykulami[...]
  • jakies ID, nick, tresc, data itp itd...
  1. Tabela z komentarzami:
    id_komentarza,
    id_newsa,
    nick,
    tresc,
    data,
    ... i co tam jeszcze chcesz

Zeby wyswietlic komentarze do danego newsa/arta dajesz zwykle SELECT * FROM komentarze WHERE id_newsa='jakies_id' i masz cala tablice komentarzy

dopisane:

masz udostępnione źródła kojota - zerknij jak to jest tam zrobione

khem, to troche jak "sciagnij zrodla Quanty zeby zobaczyc jak sie pisze Notatnika"... przeciez od razu widac ze Kolega nie ma szans tego na takim przykladzie ogarnac (bez obrazy) ;)

0

KOYOT jest za prosty i za wolno wyswietla posty (bez obrazy ) buhahha JEstem za cienki zeby analizowac kojota. I wiem to ale dziekuje za pomoc.

0

KOYOT jest za prosty i za wolno wyswietla posty (bez obrazy ) buhahha JEstem za cienki zeby analizowac kojota. I wiem to ale dziekuje za pomoc.

za wolny? za prosty? wybacz, ale zwyczajnie pieprzysz. poza tym nie chodzi o kojota, tylko o metodę jak to zrobić.
poza tym - jeśli jesteś za cienki na kojota, to jak możesz twierdzić, że jest za prosty? eh... [sciana]

0

Spokojnie kurde please ! właśnie było święto zmarłych i nie mam ochoty teraz chować jakiś trupów wojny na forum.

Interesuje nas prosty system newsów z komentarzami:

  • każdy komentarz jest przypisany do jednego określonego newsa
  • nie istnieją komentarze do komentarzy

chcemy gromadzić następujące informacje:
news: tresc, tytul
komentarz: tresc, nick

możliwe rozwiązania:

1 tabelka

  • wygoda w budowaniu zapytań SQL
  • obserwowalne spowolnienie przy rozrastaniu się bazy
  • marnotrawienie miejsca (duża liczba null)

2 tabelki

  • oszczędność miejsca
  • łatwe rozszerzanie bazy o nowe struktury (skalowalność)

n tabelek

  • turbo prędkość działania bazy
  • rozwiązanie nietypowe, wymagające sporo kodowania
  • marnotrawienie miejsca na metadane

"Profesjonalnie" jest użyć 2 tabelek:
news (ID, tresc, tytul) klucz główny=ID,
komentarz (ID, newsID, tresc, nick) klucz główny=ID

idea jest prosta, w każdy wiersz drugiej tabeli to jeden komentarz - posiada własne unikalne ID, treść i nick oraz: ID newsa do którego ten komentarz jest przypisany.

najwięcej pracy będziesz musiał włożyć w usuwanie newsów - musisz odpowiedzieć na dwa pytania:

  1. Czy można usunąć newsa jeśli sa do niego przypisane jakieś komentarze ?
  2. A jeśli tak, to czy usuwamy je razem z newsem czy przechowujemy w jakiś sposób ?
0

ŁF dla ciebie najprosciej napisac odpowiedz : 'JUZ BYLO' analizowanie zbyt skomplikowanych zrodel jest beznadziejne czasem sam autor ma klopoty. Nie kazdy jest tak blyskotliwy jak TY.

Kapusta Dzieki za odp.

Z tego co zrobilem to tak

mam tabelka pierwsza i tam mam
ID , Temat, Tresc
1 nowy tresc artu
2 drugi tersc artu2
7 kolejny tresc ntego artu

i tabelke druga
ID, ID_artu, tresc, nick
1 7 fajny art minio
2 7 kolejna tresc jacek
3 1 ahaaa ola
4 2 bebiko asia

czyli jak chce wyswietlic temat i komentarze do niego to pisze
SELECT * FROM pierwsza WHERE id=7 <-- to mi wyswietli art temat itd
SELECT * FROM druga WHERE ID_artu=7 <-- a to wszytskie odpoiwedzi ?

a co do kasowania to chyba jesli skasuje ART to i odpowiedzi tez skasuje
Tak to powinno wygladac ?

0

Dokładnie tak !

Pole takie jak "ID_artu" w tabeli "druga" w literaturze nazywa się kluczem obcym (foreign key) i faktycznie najczęściej oczekuje się, że wraz z usuwaniem art'a kaskadowo usuwane będą komentarze. Można to określić za pomocą jednego wiersza SQL w definicji tabelki "druga":

create table druga {
...
id_artu int not null references pierwsza(id) on delete cascade,
...

inne opcje to
on delete set null
on delete restrict // domyślna

(można też zmodyfikować już istniejącą tabelkę poleceniem alter table, foreign key)

niestety nie zawsze to działa i w praktyce często trzeba oprogramować akcję kaskadowego usuwania samodzielnie (Oczywiście w tym wypadku nie jest to wielki kłopot).

Jest tak chyba dlatego, bo niektóre proste systemy zarządzania bazą danych (jak MySQL) nie implementują tej części standardu SQL. (swoją drogą ciekawe częścią której wersji SQLa są akcje "on delete ..." ?)

pozdrawiam

0

co daje ta linijka ?

id_artu int not null references pierwsza(id) on delete cascade,

jakbys mogl wyjasnic :)

0

w teorii oznacza to, że id_artu jest polem typu int, na które zostały nałożone następujące ograniczenia:

not null:
jego wartość nie może być null

references pierwsza(id):
w tabeli "pierwsza" musi istnieć wiersz o takim id ...

on delete cascade:
... w przypadku usunięcia tego wiersza wszystkie komentarze odwołujące sie do niego też są usuwane z bazy danych (tak zwane kaskadowe usuwanie)

W praktyce różne systemy bazo danowe w różnym zakresie implementują te mechanizmy i może zaistnieć potrzeba samodzielnego oprogramowania pożądanego zachowania.

Prawdopodobnie internet przyzwyczaił nas już do sytuacji gdzie link odnosi się do jakieś strony, która już nie istnieje. W aplikacjach taka sytuacja jest często niedopuszczalna i w odpowiedzi na tą potrzebę, systemy bazodanowe oferują mechanizm który do niej nie dopuści - właśnie poprzez wspomniane dwa mechanizmy:

references:

  • w chwili tworzenia linku (klucza obcego) wskazywany wiersz musi istnieć

on delete:

  • gdy, już po dodaniu kilku linków (kluczy obcych), będzie podejmowana próba usunięcia wskazywanego przez nie wiersza, można:
  1. zabronić usunięcia (restrict)
  2. wykasować wiersze z linkami (kluczami obcymi) (cascade)
  3. wyczyścić tylko pola linków (ustawić je na wartość null) (set null)

1 użytkowników online, w tym zalogowanych: 0, gości: 1