webForumDet fria alternativet

Lägga till kommentarer till en artikel?

Databaser & SQL

4 svar · 262 visningar · startad av pakmannen

Medlem sedan dec. 2002227 inlägg
Frågan#1

Vet inte om detta kanske borde vara i php forumet, men i alla fall:

Jag har en tabell som heter artiklar, där lagras id, rubrik, texten, datum och författaren. Detta fungerar utmärkt och allt är frid och fröjd.

Men så tänkte jag att jag skulle lägga till ett kommentarsystem så att man kan kommentera varje artikel. Och längst ner på varje artikel visas kommentarerna och ett litet forumlär där man kan skriva in kommentaren.

Jag kan ju inte göra en ny tabell för varje artikel, det skulle bli alldeles för rörigt. Och jag har bara tillgång till en databas.
Skall jag göra en egen tabell för kommentarerna? Men hur skall dom veta vilken artikel dom skall visas i?

Vore bra om någon kunde hjälpa.

PS. Jag är riktigt ny, började med det här i går typ. Så var inte alltför elaka.. :)

Medlem sedan dec. 200012 464 inlägg
#2

Skapa en ny tabell, tex.

create table kommentar(artikelid int,kdatum datetime, kommentar text,vem varchar(20))

Du använder id-numret för artikeln för att koppla ihop den med en viss kommentar. Dvs, när du visar en artikel så har du med id i ett hidden fält och använder det värdet när du gör insert i kommentarstabellen.

För att få fram kommentarer för alla artiklar kan du använda denna fråga

select * from artiklar left outer join kommentarer 
  on id = artikelid 
  order by id, kdatum

Det behövs en outer join för att du skall få med även de artiklar som saknar kommentarer.

Medlem sedan dec. 2002227 inlägg
#3

Tja, inte för att jag fattar så mycket, men jag ska kolla det imorgon.

Men fungerar detta så att man kan ha flera kommentarer för varje artikel? då måste dom kommentarerna ha samma id eller? (fast hur kan man då skilja på dom?)

och vad är en outer joint?
(som jag sa är jag helt ny på detta..)

EDIT: varför döpte du en kollumn till kdatum? varför inte bara datum? finns det någon dold mening? Och används datetime för att automatiskt lagra datumet?

Och vad är varchar för något?

Finns det någon bra guide eller något som man kan kolla in? Eller någon bra bok?
Blä, många frågor.. :)

Medlem sedan dec. 200012 464 inlägg
#4

Du kan ha flera kommentarer för varje artikel. Jag tänkte att man kan använda artikelid + kdatum + vem för att identifiera en viss kommentar. Om du har med datum så är det enkelt att sortera också. Att jag döpte kolumnen till kdatum vara bara för att den skulle vara unik eftersom du redan har en datumkolumn i artikeltabellen.

Outer joint var en ny en. Join heter det och det innebär att man kopplar ihop värden från två eller flera tabeller. Det är bland det mest fundamentala i relationsteori så det måste man bara förstå.

Skillnader mellan inner och outer join förklarar jag i detta inlägg:

http://www.webforum.nu/showthread.php?s=&postid=124600#post124600

Varchar är en datatyp som man kan använda för att lagra textdata av variabel längd. I detta fall är maxlängden 20 men man kan ange upp till 255 i Mysql. (om man behöver kunna lagra mer än så så får man använda typen text.)

Datetime används för att lagra datum och tid. Det är ingen automatik utan man får själv ange värdet när man gör insert eller update. Funktionen current_timestamp returnerar aktuell tidpunkt.

Medlem sedan dec. 2002227 inlägg
#5

Är det inte bra att ha två kolumner som heter datum? (För jag gjorde precis det)
Men hur som helst. Jag löste det på ett lite enklare sätt. Jag hade en artikelid som lagrade i vilken artikel kommentaren skrevs, sedan bara jag la in i artiklarna att de kommentarer vars artikelid var lika med artikelns id skulle visas.

Och så använde jag mig av timestamp istället för datetime för att automatiskt lagra datumet artikeln skrevs och sedan sortera dem därefter.

261 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
124 ms — deklarationer (db)
0 ms — hämta statistik (cache)
134 ms — hämta tråd, inlägg och bilagor (db)
124 ms — ändringar (db)