webForumDet fria alternativet

SQL-fråga för meddelandelogg

13 svar · 590 visningar · startad av devotion

devotionMedlem sedan jan. 20013 582 inlägg
#1

:e
Hej!
Håller på med en meddelandefunktion där man ska kunna skicka meddelande till sina anställda. Man ska kunna skicka både till "alla" och skicka "privata" meddelanden.

Meddelandena visas på förstasidan på Intranätet.

Jag vill att man ska kunna "arkivera" meddelandena, dvs göra så de inte visas på förstasidan längre. Man ska dock kunna gå till ett arkiv och se de arkiverade meddelandena.

Nu till frågan!

Jag har två tabeller:

tblMessages
tblMessagesLog

I tblMessages lagras: messageId, messeageSubject, message, user, createdBy, createdDate

user är den som meddelandet är ställt till. Kan vara Alla eller specifik användare

i tblMessageLog lagras messegeLogId, messageId, archived

archived är true/false

dessa tabeller skall kopplas ihop

hur gör jag en fråga som visar meddelanden som inte är arkiverade och tar hänsyn till specifik användare.Jag har lyckats göra en fråga där deta funkar för specifik användare. Men jag vet inte hur jag ska göra när meddelandet är ställt till alla.....

Hoppas nån fattar....

mvh

Henrik :h

emissionMedlem sedan dec. 19996 721 inlägg
#2

Varför två tabeller? Med en archived-kolumn i tblMessages så är du hemma.

devotionMedlem sedan jan. 20013 582 inlägg
#3

Jo så gjorde jag först!
Och det gick ju jättebra att arkivera de meddelande som är ställda till en specifik användare typ "Kalle" Men Hur gör jag då med de som är ställda till "Alla"? Det kanske är så att jag gör en tankevurpa. Men om "Kalle" arkiverar" (sätter archived till true) så kan väl ingen annan heller se meddelandet eller??? Tänker jag fel??

Därav så tänkte jag lösa det med två tabeller istället..

Mvh
Henrik

emissionMedlem sedan dec. 19996 721 inlägg
#4

Jaha, det är användarna som arkiverar. I så fall så måste du lagra vem som arkiverat i tblMessagesLog (lägg till en user-kolumn där), så ska du se att det löser sig.

devotionMedlem sedan jan. 20013 582 inlägg
#5

:)
ok, en kolumn till för User i tblMessagelogg...
men hur ska sql-frågan se ut???

Vilken join skall användas? Har prova´t med INNER JOIN men då visas bara de meddelande som är arkiverade...
Mvh
Henrik

devotionMedlem sedan jan. 20013 582 inlägg
#6

:birp
Sä här ser frågan ut nu... Men då visas ju bara de poster som är arkiverade.. :(

SELECT tblMessages.MessageId, tblMessages.message, tblMessages.createdBy, tblMessages.messageSubject, tblMessages.priority, tblMessageLog.messageArchive, tblMessageLog.createdDate, tblMessageLog.EditDate, tblMessageLog.expireDate, tblMessageLog.User
FROM tblMessages INNER JOIN tblMessageLog ON tblMessages.MessageId = tblMessageLog.messageId;

Hur gör jag för att alla ska visas?

Mvh
Henrik

Capture_3.jpg
devotionMedlem sedan jan. 20013 582 inlägg
#7

:e
Hej!
Frågan löste jag med att använda en LeftJoin istället för innerJoin!!

Nu skulle jag behöva hjälp med WHERE-satsen...

Så här ser den ut nu:

strSQL = 	"SELECT tblMessages.MessageId, tblMessages.message, tblMessages.toUser, tblMessages.messageSubject, " &_
			"tblMessages.createdBy, tblMessages.messagePriority, tblMessages.createdDate, tblMessages.ExpireDate, " &_
			"tblMessages.EditDate, tblMessageLog.messageArchived, tblMessageLog.archivedDate, tblMessageLog.archivedBy, " &_
			"FROM tblMessages " &_
			"LEFT JOIN tblMessageLog ON tblMessages.MessageId = tblMessageLog.messageId " &_
			"WHERE toUser = 'Alla' AND expireDate > #" & Date() & "# " &_
			"ORDER BY createdDate DESC"

Det jag inte får till är villkoret som gör så att inget skall visas om En viss användare har arkiverat meddelandet.

Dvs att posten innehåller användarens namn på "archivedBy" samt att "archived" är true...

Hur ska jag göra? har fått tipps om en subquery men vet inte hur jag ska få till det...!!!

Jag bifogar en bild på hur resultatet ser ut utan wheresatsen!

Och jag använder access!

Mvh
Henrik

Capture_4.jpg
emissionMedlem sedan dec. 19996 721 inlägg
#8

Bra jobbat! Du är på rätt väg. Det du ska göra är att utöka villkoret i din left join.

strSQL = 	"SELECT tblMessages.MessageId, tblMessages.message, tblMessages.toUser, tblMessages.messageSubject, " &_
			"tblMessages.createdBy, tblMessages.messagePriority, tblMessages.createdDate, tblMessages.ExpireDate, " &_
			"tblMessages.EditDate, tblMessageLog.messageArchived, tblMessageLog.archivedDate, tblMessageLog.archivedBy, " &_
			"FROM tblMessages " &_
			"LEFT JOIN tblMessageLog ON tblMessages.MessageId = tblMessageLog.messageId AND archivedBy='" & användarnamnet & "' AND archived=True & " " &_
			"WHERE toUser = 'Alla' AND expireDate > #" & Date() & "# " &_
			"ORDER BY createdDate DESC"

Du kommer att få med alla meddelanden, oavsett om de är arkiverade eller ej, men genom att kolla i WHERE-satsen så kan du styra även det

"tblMessageLog.archivedBy IS NULL" innebär att det inte fanns någon match i tblMessageLog. Med andra ord är meddelandet inte arkiverat

"tblMessageLog.archivedBy IS NOT NULL" innebär att det fanns en match i tblMessageLog. Med andra ord är meddelandet arkiverat

Kolumnen archivedBy tog jag bara som exempel. Du kan ta vilken annan kolumn som helst för att kolla (såvida inte kolumnen i sig kan innehålla NULL)

devotionMedlem sedan jan. 20013 582 inlägg
#9

Hmm fick följande felmeddelande när jag utökade vilkoret i Left Join-

Feltyp:
Microsoft OLE DB Provider for ODBC Drivers (0x80040E14)
[Microsoft][Drivrutin för ODBC Microsoft Access] SELECT-uttrycket innehåller ett reserverat ord eller argument som antingen är felstavat eller utelämnat, eller så är skiljetecknen felaktigt använda.
/frames/mainFrame.asp, line 223

Med följande kod:

strSQL = 	"SELECT tblMessages.MessageId, tblMessages.message, tblMessages.toUser, tblMessages.messageSubject, " &_
			"tblMessages.createdBy, tblMessages.messagePriority, tblMessages.createdDate, tblMessages.ExpireDate, " &_
			"tblMessages.EditDate, tblMessageLog.messageArchived, tblMessageLog.archivedDate, tblMessageLog.archivedBy, " &_
			"FROM tblMessages " &_
			"LEFT JOIN tblMessageLog ON tblMessages.MessageId = tblMessageLog.messageId AND archivedBy = '" & Request.Cookies("sydostel")("User") & "' " &_
			"WHERE toUser = 'Alla' AND expireDate > #" & Date() & "# " &_
			"ORDER BY createdDate DESC"

Kan inte se någe fel...

MVH
Henri

emissionMedlem sedan dec. 19996 721 inlägg
#10

Hmm...skriv ut den färdiga SQL-satsen så kanske man ser vad som kan vara fel. Möjligen är Access lite känslig, så vi lägger till lite parenteser och bapp...

strSQL = 	"SELECT tblMessages.MessageId, tblMessages.message, tblMessages.toUser, tblMessages.messageSubject, " &_
			"tblMessages.createdBy, tblMessages.messagePriority, tblMessages.createdDate, tblMessages.ExpireDate, " &_
			"tblMessages.EditDate, tblMessageLog.messageArchived, tblMessageLog.archivedDate, tblMessageLog.archivedBy, " &_
			"FROM tblMessages " &_
			"LEFT JOIN tblMessageLog ON (tblMessages.MessageId = tblMessageLog.messageId AND tblMessageLog.archivedBy = '" & Request.Cookies("sydostel")("User") & "') " &_
			"WHERE toUser = 'Alla' AND expireDate > #" & Date() & "# " &_
			"ORDER BY createdDate DESC"
devotionMedlem sedan jan. 20013 582 inlägg
#11

Hej!
Tyvärr samma felmeddelande... Nu går jag och lägger mig! Tar ny tag i morgon... (eller idag är det ju.. ska i a f sova några timmar)

/Henrik

Peter SMedlem sedan dec. 20025 483 inlägg
#12

Du har ett kommatecken för mycket i slutet på den tredje raden. Istället

strSQL = 	"SELECT tblMessages.MessageId, tblMessages.message, tblMessages.toUser, tblMessages.messageSubject, " &_
			"tblMessages.createdBy, tblMessages.messagePriority, tblMessages.createdDate, tblMessages.ExpireDate, " &_
			"tblMessages.EditDate, tblMessageLog.messageArchived, tblMessageLog.archivedDate, tblMessageLog.archivedBy " &_
			"FROM tblMessages " &_
			"LEFT JOIN tblMessageLog ON (tblMessages.MessageId = tblMessageLog.messageId AND tblMessageLog.archivedBy = '" & Request.Cookies("sydostel")("User") & "') " &_
			"WHERE toUser = 'Alla' AND expireDate > #" & Date() & "# " &_
			"ORDER BY createdDate DESC"
devotionMedlem sedan jan. 20013 582 inlägg
#13

hmmm... det var ju retfullt....

Ska testa att ta bort det!

Mvh
Henrik

devotionMedlem sedan jan. 20013 582 inlägg
#14

Jaha... Blev lite fundersam när emisions lösning inte funkade... Men som Peter S skrev så hade det kommit med ett kommatecken förmycket vilket jag min klantskalle inte såg...

Nu funkar det klockrent!

Tack alla!

Mvh
Henrik

138 ms totalt · 3 externa anrop · v20260731065814-full.ca5a5675
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
134 ms — hämta tråd, inlägg och bilagor (db)