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.
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.
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)
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
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.
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".
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.
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
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(...).
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?
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
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)"
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.
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)
273 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e