Försöker att sammanställa en kalender efter aktiviteter i flera databastabeller. Jag har gjort flera försök men jag har svårt att få till själva stukturen på det hela. Hur är datat relaterat? Innehåller datumkolumnerna enbart datum eller även tid? Finns det info om flera användare i tabellerna och hur vet man i sådana fall vem posten tillhör? -"Hur är datat relaterat? Innehåller datumkolumnerna enbart datum eller även tid? Finns det info om flera användare i tabellerna och hur vet man i sådana fall vem posten tillhör?" Ahh, nu tror jag att jag förstår... Jaf föreslår att du flyttar ut nyckeln: användare och datum till en separat tabell. Kommer noga att underlätta fråger. Eftersom du kan göra joins mot den då och på så sätt knyta tabellerna i en join: Johan: Nej, du har missuppfattat mig, jag vill inte räkna några poster. Jag missade datumet... Men om antalet är större än 0 finns det ju poster, det var väl det du ville kolla? Jag håller med Andreas, du borde lägga dagarna i en separat tabell, mycket enklare då... Ok, du menar så, ja det är en möjlighet ju. I Calender tabellen lagrar du Datum i Datum_X, Användare i ID_X och länkar sedan det andra posterna till räknaren CalenderId. Ok, men om jag lägger till en post i låt säga "agenda_P" så måste jag väl samtidigt uppdatera "calender" för att en post skall läggas till även där? <code> Tack... Vad menar du med: Nu så ser det ut så här, dock inte alla tabeller ännu men vad tror ni/du, är det ett effektivt sätt? Vad tror du if-satren gör? Underfråger är inte bra. Det är enklare att ställa separata fråger om det bara skall jämföras mot en dag. Du skriver:-"Underfråger är inte bra. Det är enklare att ställa separata fråger om det bara skall jämföras mot en dag" Du kommer inte få något resultat om det saknas post för datumet i chatmote. Det är därför du skall ha en central tabell. Det stämmer inte, jag behöver inte någon post. Nu har jag ingen post i "chatmöte" men ändå visas de andra posterna. Är selecten för övrigt ineffektiv?Databasfråga [Funderar fortfarande]
Jag tror att jag är tvungen att ha det mesta i olika tabeller för att spara på onödig kolumnplats(tomma kolumnfält).
Det jag nu vill göra är att markera ut i kalendern med iconer när jag har händelser i de olika tabellerna på ett visst datum och relaterat till u.ID_U Users u
Ungefär som på bilden:
http://hem.passagen.se/vurma/images/agenda.gif
Mina tabeller och kolumner kommer säkerligen att bli flera men för tillfället ser det ut ungefär så här:
Agenda_P
--------------------------
Datum_P | ID_P | Text_P
Agenda_A
--------------------------
Datum_A | ID_A | Text_A | Note_A
Traning
--------------------------
Datum_T | ID_T | AktivitetId_T | Text_T
Users
--------------------------
Namn_U | ID_U | Adress_U | Tel_U | Gata_U | Ort_U | Mnummer_U
Chatmote
--------------------------
Datum_C | ID_C | Text_C | Tid_C
Har ni några idéer hur man strukturerar upp detta?Sv: Databasfråga
/JohanSv: Databasfråga
Datumkolumnerna innehåller endast datum.
Ja, det kan finnas info om alla avnändare i samtliga tabeller.
Detta är alla Id i tabellerna, altså om användare Bosse har ID 10 så
Står det i tabellen Users
Namn_U | ID_U
-------------------
Bosse | 10
Och gör ha ett inlägg i tex Traning så blir "ID_T", 10.
Så allt styr på personen(ID) samt datumetSv: Databasfråga
SELECT Namn_u, COUNT(ID_P) AS Agenda_P, COUNT(ID_A) AS Agenda_A, COUNT(Traning) AS Traning, COUNT(Chatmote) AS Chatmote
FROM Users
LEFT JOIN Agenda_P ON ID_U = ID_P
LEFT JOIN Agenda_A ON ID_U = ID_A
LEFT JOIN Traning ON ID_U = ID_T
LEFT JOIN Chatmote ON ID_U = ID_C
GROUP BY ID_U, Namn
Detta kommer visa antalet poster i varje tabell för varje användare...
/JohanSv: Databasfråga [Funderar fortfarande]
Calender
--------------------------
Datum_X | ID_X | CalenderId
Agenda_P
--------------------------
Calender_P | Text_P
Agenda_A
--------------------------
Calender_A | Text_A | Note_A
Traning
--------------------------
Calender_T | AktivitetId_T | Text_T
Users
--------------------------
Namn_U | ID_U | Adress_U | Tel_U | Gata_U | Ort_U | Mnummer_U
Chatmote
--------------------------
Calender_C | Text_C | Tid_C
Eller så skippar du separata tabeller. och implementerar en dynamisk lösning:
Users
--------------------------
UserID | UserNamn | UserAdress | UserTel | UserGata | UserOrt | UserMnummer
Types
--------------------------
TypeId | TypeName | TypeDescription
Entry
--------------------------
EntryID | EntryUser | EntryType | EntryDate
Properties
--------------------------
PropertyId | PropertyName | PropertyDescription
EntryProperties
--------------------------
EntryPropertyId | EntryPropertyEntry | EntryPropertyPropertySv: Databasfråga [Funderar fortfarande]
Andreas Hillqvist: Men hur skall då man veta att Bosses poster i tabellerna tillhör Bosse? Det personliga id:t måste väl finnas med när man lägger in en post i tex Agenda_P eller i Traning annars går det ju inte att koppla ihop saker i Bosses kalender.Sv: Databasfråga [Funderar fortfarande]
/JohanSv: Databasfråga [Funderar fortfarande]
Dagarna i en separat tabell?
Menar du att man lägger till aktiviteter i den tabellen samtidigt när man lägger till saker i de andra tabellerna?
Jag vill ju också få iconerna klickbara och då måste ju något slags idvärde ligga i länken.Sv: Databasfråga [Funderar fortfarande]
Men...
Jag använder aspteknik med vbScript, skulle jag kunna få ett litet exempel?
MVH JeppeSv: Men...
Dim rs
Dim conn
Dim CalenderId
Const adUseServer = 2
Const adOpenKeyset = 1
Const adLockOptimistic = 3
Set conn = Server.CreateObject("ADODB.Connection")
conn.Open "............................"
Set RS = Server.CreateObject("ADODB.Recordset")
RS.CursorLocation = adUseServer
RS.Open "SELECT * FROM Calender WHERE ID_X = " & UserId & " AND Datum_X = #" & varDate & "#", conn, adOpenKeyset, adLockOptimistic
If RS.EOF Then
RS.AddNew
RS("ID_X") = UserId
RS("Datum_X") = varDate
RS.Update
End If
CalenderId = RS("CalenderId")
RS.Close
Set RS = Nothing
Con.Execute "INSERT INTO Agenda_P (Calender_P, Text_P) VALUES (" & CalenderId & ", 'Test!'""
Con.Close
Set Con = Nothing
</code>Sv: Men...
Men då läggs ju inget in i den så kallade huvudtabellen. (Den som gavs namnet "calender")
Var det inte meningen att samtliga tabeller skall "styra" på en (calender).
Detta är ett virrvarr hur man kopplar ihop flera tabeller på en sida, jag vill ju dessutom få det så effektivt som möjligt . Sv: Men...
-"Eller så skippar du separata tabeller. och implementerar en dynamisk lösning:
Users
--------------------------
UserID | UserNamn | UserAdress | UserTel | UserGata | UserOrt | UserMnummer
Types
--------------------------
TypeId | TypeName | TypeDescription
Entry
--------------------------
EntryID | EntryUser | EntryType | EntryDate
Properties
--------------------------
PropertyId | PropertyName | PropertyDescription
EntryProperties
--------------------------
EntryPropertyId | EntryPropertyEntry | EntryPropertyProperty"Sv: Men...
Id = request("Id")
d = request("datum")
SQL = "SELECT Count(chatmote.CM_Id) AS Inlchatmote,"&_
" (SELECT Count(Agenda.A_id) FROM Agenda WHERE Agenda.A_datum = #" & d & "# AND Agenda.A_id="& Id &") AS InlAgenda ,"&_
" (SELECT Count(Calendar.C_id) FROM Calendar WHERE Calendar.C_datum = #" & d & "# AND Calendar.C_id="& Id &") AS InlCalendar FROM chatmote"&_
" WHERE chatmote.CM_Id="& Id &" AND chatmote.CM_datum = #" & d & "#"Sv: Men...
<code>
If RS.EOF Then
RS.AddNew
RS("ID_X") = UserId
RS("Datum_X") = varDate
RS.Update
End If
</code>
Om en post saknas läggs det till en. Annars används befintlig post.Sv: Men...
Sv: Men...
Då går det alltså inte att göra så här?:
<code>
SQL = "SELECT Count(chatmote.CM_Id) AS Inlchatmote,"&_
" (SELECT Count(Agenda.A_id) FROM Agenda WHERE Agenda.A_datum = #" & d & "# AND Agenda.A_id="& Id &") AS InlAgenda ,"&_
" (SELECT Count(Calendar.C_id) FROM Calendar WHERE Calendar.C_datum = #" & d & "# AND Calendar.C_id="& Id &") AS InlCalendar FROM chatmote"&_
" WHERE chatmote.CM_Id="& Id &" AND chatmote.CM_datum = #" & d & "#"
</code>Sv: Men...
Sv: Men...