webForumDet fria alternativet

Någon som kan hjälpa mig med en sql fråga i access?

Databaser & SQL

21 svar · 1 001 visningar · startad av mathias_b

Medlem sedan jan. 200922 inlägg
Frågan#1

Hej jag är ny här på forumet å har ett promblem med sql. Jag är ganska dålig på just sql så min fråga har säkert en enkel lösning.

Jag håller på att tillverka en blogg, och på första sidan ska jag lista de olika kategorierna på bloggarna samt senaste skrivna blogg för var å en av kategorierna.

jag använder mig av två tabeller här:TBLindex som är tabellen för förstasidan och inehåller fälten:FLDindexid och FLDkategori.

Andra tabellen är TBLblogg som är till för alla bloggar med fälten:FLDrubrik och FLDindexid som de viktigaste i den här frågan.

Jag har testat många olika sätt att lösa det med inner join å allt möjligt utan att lyckas. problemet i sig är att blogg kategorierna i TBLindex kanske är 3 eller 4 stycken medans bloggarna kan va hur många som helst..
Jag vill ju endast att den ska skriva ut de få kategorierna i någon loop å bredvid kategorin skriva ut senaste skrivna bloggen för den kategorin.
Som exempel på hur det ska se ut:

kategori:musik, senaste blogg:Vikingarna är bra?
kategori:filosofi, senaste blogg: funderar på en sak...
kategori:politik, senaste blogg:vad jag tycker om reinfeldt...

det ända resultat jag fått är att den loopar ut alla bloggarna med musik först (kanske 10 stycken) å sen alla med filosofi å sen alla med politik...

Skulle va jätte tacksam om någon kunde ge något förslag på hur jag löser det, tabellerna har ju såklart flera fält som datum och lite annat fast skrev ner dom som jag tror är viktigast just i samanhanget.

Medlem sedan apr. 2006409 inlägg
#2

Det är aningen svårt att hjälpa utan att veta vad du gjort hittills... Vad får du ut nu, vad använder du för sql-fråga?

Om du bara vill ha en från varje kategori kan du använda GROUP BY kategori. Vidare så kan du ju sortera efter datum eller tid, ja vad du använder i tabellen.

Medlem sedan dec. 200012 464 inlägg
#3
select FLDkategori,
         FLDRubrik
  from TBLIndex inner join TBLblogg
     on TBLIndex.FLDindexid = TBLblogg.FLDindexid
 where TBLBlogg.datum = 
       (select max(datum)
           from TBLblogg bg
          where bg.FLDindexid = TBLBlogg.Indexid)
Medlem sedan jan. 200922 inlägg
#4

Tack för svaren, jag ska testa lite å mixtra med råden jag fått. Skriver ner en del av det jag gjort så det blir lättare att förstå kanske.

<%
connect()

sql=" sql uttryck som behövs"
rsRecSet.Open sql,cnConn,1,2
If rsRecSet.EOF = True Then
Response.Write"<br>"&("Inga blogg kategorier finns ännu!")& "<br>"
else

do until rsRecSet.eof
%>

<div class="blogg_kategori">

<h2><%swe(rsRecSet("FLDtitel"))%></h2>
</div>
<div class="senaste_blogg">
<%''swe(rsRecSet("FLDrubrik"))%>

<%if session("user")="administrator" then%>
<a href="admin3.asp?blogg=<%=rsRecSet("FLDid")%>">radera denna blogg med alla inlägg</a>
<%end if%>

</div>
<br>

<%
rsRecSet.MoveNext

loop

conn_close()
end if
%>

Medlem sedan jan. 200922 inlägg
#5

hej

LarsG skrev:

select FLDkategori,
         FLDRubrik
  from TBLIndex inner join TBLblogg
     on TBLIndex.FLDindexid = TBLblogg.FLDindexid
 where TBLBlogg.datum = 
       (select max(datum)
           from TBLblogg bg
          where bg.FLDindexid = TBLBlogg.Indexid)

Förstod inte helt, är bg samma som tabellen TBLblogg? är inte så haj på sql som sagt men din lösning ser vettig ut.

Medlem sedan jan. 200922 inlägg
#6

testade lite men lyckades inte riktigt..

sql="select TBLindex.FLDtitel from TBLindex,TBLblogg where TBLindex.FLDindexid=TBLblogg.FLDindexid group by TBLindex.FLDkategori"

verkar kunna va en del av lösningen kanske? men hur får jag den att även skriva ut värdet från FLDrubrik? försökte lägga till den i sql uttrycket men fick felmedelandet att det inte gick om den inte används i "group by".

Medlem sedan jan. 200922 inlägg
#7

försvan alla?

Medlem sedan dec. 20025 483 inlägg
#8

Har du testat förslaget från Lars? Vad fick du för resultat?

Medlem sedan jan. 200922 inlägg
#9

hej

Peter S skrev:

Har du testat förslaget från Lars? Vad fick du för resultat?

Inte helt eftersom jag inte förstod helt hur han menade, var kommer "bg" å "bg.FLDindexid" in? är det någon ny tabell eller vad? är som sagt dåligt insatt i sql.

Medlem sedan dec. 2004736 inlägg
#10

"from TBLblogg bg" ger tabellen TBLblogg ett "alias" som i det här fallet är "bg". Därifrån kommer det in.

Medlem sedan jan. 200922 inlägg
#11

hej

får felmedelandet:

Microsoft OLE DB Provider for ODBC Drivers (0x80040E10)
[Microsoft][Drivrutin för ODBC Microsoft Access] För få parametrar angavs. 1 förväntades.
/blogg/index.asp, line 28

när jag använder det sql uttrycket.

Medlem sedan jan. 200922 inlägg
#12

Ledel skrev:

"from TBLblogg bg" ger tabellen TBLblogg ett "alias" som i det här fallet är "bg". Därifrån kommer det in.

okej då förstår jag bättre (sökte lite på nätet om det, har inte läst mycket sql så mycket är nytt för mig).

Medlem sedan maj 200591 inlägg
#13

Testa att slänga in ett "AS":

from TBLblogg [B]AS[/B] bg
Medlem sedan dec. 20025 483 inlägg
#14

Kontrollera alla fält- och tabellnamn i SQL-frågan så att de stämmer. T.ex. använder Lars max(datum) där "datum" är namnet på datumkolumnen i TblBlogg; heter den kolumnen egentligen någonting annat så måste du ändra till det i max(...).

Medlem sedan jan. 200922 inlägg
#15

Testad med å lägga in "AS bg" men fortfarande samma fel meddelande, fält namnen finns med allihop (jag valde MAX(FLDid) som är ett auto numrerat fält istället för datum men det borde väl inte påverka det hela?

Medlem sedan dec. 20025 483 inlägg
#16

Jo, det måste vara namnet på det datumfält som finns i TBLBlogg. Även följande rad måste ändras så att rätt fältnamn används:

where TBLBlogg.datum
Medlem sedan jan. 200922 inlägg
#17

Förstår vad du menar men istället för å välja att den ska välja maxvärdet på datum så låter jag den välja maxvärdet på FLDid (som är ett auto nummrerings fält, vilket borde inebära att den i så fall skulle sortera ut den blogg med högsta numret istället för datum) så det kan inte vara det som orsakar felet:
Microsoft OLE DB Provider for ODBC Drivers (0x80040E10)
[Microsoft][Drivrutin för ODBC Microsoft Access] För få parametrar angavs. 1 förväntades.
/blogg/index.asp, line 28

Medlem sedan jan. 200922 inlägg
#18

Har gjort följande alltså när jag får felmedelande jag skrev om innan:

sql="select FLDkategori,FLDrubrik from TBLindex inner join TBLblogg on TBLindex.FLDindexid = TBLblogg.FLDindexid where TBLblogg.FLDid = (select max(FLDid) from TBLblogg AS bg where bg.FLDindexid = TBLBlogg.indexid)"

Medlem sedan maj 200591 inlägg
#19

Testa att köra samma sql-fråga innifrån Access. Där kan man få bättre koll på exakt var i frågan som felet är. När jag klistrar in exakt samma fråga i Access får jag nämligen inga fel. Troligtvis är det som Peter_S säger att dina namn inte matchar vad du har i databasen.

Medlem sedan dec. 20025 483 inlägg
#20
select FLDkategori,FLDrubrik from TBLindex inner join TBLblogg on TBLindex.FLDindexid = TBLblogg.FLDindexid where TBLblogg.FLDid = (select max(bg.FLDid) from TBLblogg AS bg where bg.FLDindexid = TBLBlogg.indexid)
272 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
131 ms — deklarationer (db)
0 ms — hämta statistik (cache)
137 ms — hämta tråd, inlägg och bilagor (db)
120 ms — ändringar (db)