Efter att ha hört mig för här på webForum gjorde jag mitt forum med två tabeller; en för huvudämnen (tblTopics) och ett för svar (tblReplies) och det fungerar fint. Men problem uppstår när jag på en annan sida vill visa de 5 senaste inläggen och eventuellt ett kort utdrag ur dessa. Jag tror jag behöver hjälp med sql-satsen.
Så här ser tabellerna ut.
tblTopics:
* TopicID
* Subject
* Body
* UserID
* Date
* LastPost
tblReplies:
* ReplyID
* TopicID
* Body
* UserID
* Date
Jag började skriva en sql-sats, men insåg ganska snart att den inte skulle fungera.
"SELECT TOP 5 * FROM tblTopics, tblReplies ORDER BY..." <--?
Jag sökte lite på sql tutorial-länken ovan, men jag vet inte riktigt vad jag ska leta efter.
<%
sql="select top 5* from tblTopics order by Date DESC"
Set rs = conn.Execute(SQL)
while not rs.eof
SQL2="select * FROM tblReplies where TopicId = " & RS("TopicID")
set rs2 = conn.execute(SQL2)
%>
<%= RS("Subject") %>
<%= RS2("Body") %>">
<%= RS2("Date") %>
<%
rs.movenext
loop
%>
Kanske inte världens smidigaste lösning men d bör fonka...
Jag har testat Vides, och det sket sig med inlägg som inte har några svar. Vad gäller ditt förslag, EchO, tror jag inte heller det fungerar eftersom du endast hämtar bodyn från tblReplies. Vad händer om det senaste inlägget är ett huvudämne och således ligger i tblTopics? Jag vet inte hur jag ska lösa detta, men jag är rädd för att jag ska behöva göra stora förändringar i databasstrukturen.
Jag skulle behöva lägga ihop alla "Subject", "Body", "Date" och "TopicID" från båda tabellerna till en ny (tillfällig) tabell och sortera efter "Date".
Jag skulle för det första inte använda den databasmodellen du använder, utan lägga alla inlägg i samma tabell, oavsätt om det är svar eller inte. Som du ser i dina tabeller så är det inte mycket som skiljer dom åt, och det skulle bli betydligt lättare att programmera mot om dom låg i samma tabell.
Annars kommer LarsG med en briljant lösning... ;)
------------------
Doesn't 'expecting the unexpected' make the unexpected expected? webeye.nu
för att få reda på id för senast inlagda post är att någon annan kan hinna att göra insert mellan den tidpunkt då du gör insert och då du gör select. Du kan alltså få tag på ett id som hör till en annan post.
Det finns inbyggda funktioner för att hantera detta och i Access 2000 så kan
man göra
select @@identity
och sedan hämta det som ett vanligt resultat.
------------------ essentitia preter non sans multiplicandum
Men den sql-satsen använde jag för att räkna ut vilket som var det högsta "TopicID":t eftersom jag inte kan ha en räknare på den kolumnen. Men ditt resonemang kanske stämmer även här.
Nu när jag bara använder en tabell (igen) har jag en kolumn kallad "TopicID" för att jag ska veta vilka inlägg som tillhör samma tråd. Flera poster har alltså samma "TopicID", och det är därför jag inte kan använda en räknare.
Men alla trådar (huvudämnen och dess svar) måste ju ha ett unikt "TopicID", och eftersom jag av ovanstående anledning inte kan använda en räknare måste jag hämta det högsta "TopicID":t och lägga på 1.
Menar du då att två om två personer startar ett nytt ämne samtidigt, så kan de få samma TopicID?
Har stundom undrat om verkligen select @@identity är bombsäkert i webbsammanhang. select @@identity hämtar ju senaste id:t för en specifik användare. Men i fallet webbserver är det alltid samma användare, nämligen webbservern. Torde kunna bli fel om man har otur. Eller hur?
------------------ En eller annan godbit från pannan
Jo, men med tanke på att connections "poolas" och ASP/ADO oftast är "stateless" torde det innebär att man är inte garanterad samma connection för alla kommandon via ADO till databasen. hehe jag måste låta paranoid :)
------------------ En eller annan godbit från pannan