webForumDet fria alternativet

Klurig SQL. Söka i fler poster men bara presentera huvudposter

Databaser & SQL

10 svar · 440 visningar · startad av Addeladde

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

Har följande SQL-fråga som visar huvudtrådar i ett forum "f.huvud=1"

Men när jag gör en sökning så vill jag även att den ska söka i inlägg som inte har "f.huvud=1" men den ska fortfarande bara visa huvudtrådar.

Hur gör jag det?

sqlString = "SELECT f.rubrik, f.id, f.rubrik, f.visad, f.datum, f.Svar, s.Firstname, s.LastName, s.MemberID " &_
	  "FROM forum as f, sysslingar as s " &_
	  "Where f.MID = s.MemberID "&_ 
	  "And f.forum = 1 "
	  IF action = "SOK" and memberID <> "" THEN
	    sqlString = sqlString &_
		"And f.MID = "& memberID &" "
	  END IF
	  IF action = "SOK" and sokord <> "" THEN
	    sqlString = sqlString &_
		"And (f.inlagg LIKE '%"& sokord &"%' " &_ 
		"Or f.rubrik LIKE '%"& sokord &"%') " 
	  END IF
	  sqlString = sqlString &_
	  "And f.huvud = 1 " &_ 
	  "ORDER BY f.senast desc"
	SET forumRS = Con.Execute( sqlString )
Medlem sedan dec. 200012 464 inlägg
#2

Lägg till detta sist i din andra if. Du får ordna till parenteserna.

or exists (select * from forum f2
where (f2.inlagg LIKE  <sokord>
  Or f2.rubrik LIKE <sokord> )
  and f2.parent = f.id)

parent motsvarar den kolumn som anger vilken tråd ett inlägg tillhör.

Medlem sedan jan. 20013 406 inlägg
#3

Är inte riktigt med på hur du gör:

	sqlString = "SELECT f.rubrik, f.id, f.rubrik, f.visad, f.datum, f.Svar, s.Firstname, s.LastName, s.MemberID " &_
	  "FROM forum as f, sysslingar as s " &_
	  "Where f.MID = s.MemberID "&_ 
	  "And f.forum = 1 "
	  IF action = "SOK" and memberID <> "" THEN
	    sqlString = sqlString &_
		"And f.MID = "& memberID &" "
	  END IF
	  IF action = "SOK" and sokord <> "" THEN
	    sqlString = sqlString &_
		"And (f.inlagg LIKE '%"& sokord &"%' " &_ 
		"Or f.rubrik LIKE '%"& sokord &"%') " &_
		"or exists (select * from forum [b]as[/b] f2 " &_
		"where (f2.inlagg LIKE  '%"& sokord &"%' " &_
 		 "Or f2.rubrik LIKE '%"& sokord &"%' ) " &_
   		"and f2.parent = f.id) "
	  END IF
	  sqlString = sqlString &_
	  "And f.huvud = 1 " &_ 
	  "ORDER BY f.senast desc"

Borde det inte vara med ett as som jag fetmarkerat ovan?

Jag får felmeddelande om att det inte angetts något värde för en eller flera nödvändiga parametrar.

Vad är parent för nått?
Sitter inte paranterserna rätt?

Medlem sedan jan. 20013 406 inlägg
#4

Löste det nu i alla fall men det presnterar alla under trådar också jag vill att den bara ska visa huvudtrådarna. Men sökningen ska fortfarande göras i undertrådar.

Medlem sedan jan. 20013 406 inlägg
#5

Får det inte att fungera: Nu ser min kod ut så här:

	sqlString = "SELECT f.rubrik, f.id, f.rubrik, f.visad, f.datum, f.Svar, s.Firstname, s.LastName, s.MemberID " &_
	  "FROM forum as f, sysslingar as s " &_
	  "Where f.MID = s.MemberID "&_ 
	  "And f.forum = 1 "
	  IF action = "SOK" and memberID <> "" THEN
	    sqlString = sqlString &_
		"And f.MID = "& memberID &" "
	  END IF
	  IF action = "SOK" and sokord <> "" THEN
	    sqlString = sqlString &_
		"And (f.inlagg LIKE '%"& sokord &"%' " &_ 
		"Or f.rubrik LIKE '%"& sokord &"%') " &_ 
		"And f.huvud = 1 " &_ 
		"Or Exists (select * from forum as f2 " &_
		"where f2.inlagg LIKE  '%"& sokord &"%' " &_
		"and f2.HTID = f.id) "
	  Else
	    sqlString = sqlString &_
		"And f.huvud = 1 "
	  END IF
	  sqlString = sqlString &_
	  "ORDER BY f.senast desc"
Medlem sedan juni 200032 967 inlägg
#6

Kan du inte skriva ut hur den färdiga SQL-frågan ser ut istället?

- - - - -

AS är valfritt, det fungerar precis lika bra att ha med det vid tilldelning av alias, som att strunta i det.

Medlem sedan jan. 20013 406 inlägg
#7

Visst kan jag det

SELECT f.rubrik, f.id, f.rubrik, f.visad, f.datum, f.Svar, f.huvud, s.Firstname, s.LastName, s.MemberID 
FROM forum as f, sysslingar as s 
Where f.MID = s.MemberID And f.forum = 1 
And (f.inlagg LIKE '%test%' 
Or f.rubrik LIKE '%test%') 
And f.huvud = 1 
Or Exists (select * from forum as f2 where f2.inlagg 
LIKE '%test%' and f2.HTID = f.id) 
ORDER BY f.senast desc
Medlem sedan jan. 20013 406 inlägg
#8

Ingen som ser vad jag gjort knasigt?

Medlem sedan jan. 20013 406 inlägg
#9

Skulle verkligen behöva hjälp med detta

Om vi börjar om från början med min SQL fråga.

Jag vill alltså endast hämta en tråd och det är huvudinlägge som ska visas i sökningen.

Tabellen består av en räknare ID, en kolumn som heter huvud och om den är satt till 1 så är det huvudinlägget. Sedan finns en kolumn som hetet HID som är ID numret på huvudinlägget.

Sökningen ska sedan göras i i både huvudinlägen och inläggen titel och beskrivning med kolumnernas namn.

Har sökt på webforum och hittat en del exempel på detta men jag har inte lyckats få till det.

Jätte tacksam för svar...

Medlem sedan dec. 20025 483 inlägg
#10

Om ThreadID motsvarar den kolumn som anger vilken tråd inlägget hör till och MID motsvarar det medlems-id som tillhör medlemmen som gjort inlägget:

select f2.rubrik, f2.visad, f2.datum, f2.Svar, s.Firstname, s.LastName 
from forum f2, sysslingar s 
where s.MemberID = f2.MID and f2.huvud = 1 and f2.ThreadID in (select distinct f.ThreadID 
from forum f 
where f.rubrik like '%test%' or f.inlagg like '%test%') 
order by f2.senast desc

:)

Medlem sedan jan. 20013 406 inlägg
#11

Kanoners Peter!!

Färdiga koden blev så här:

sqlString = "select f2.rubrik, f2.visad, f2.datum, f2.Svar, f2.huvud, f2.id, s.Firstname, s.LastName, s.MemberID " &_ 
	"from forum f2, sysslingar s " &_ 
	"where s.MemberID = f2.MID " &_ 
	"and f2.huvud = 1 "
	If action = "SOK" Then
	  If memberID <> "" Then
	    sqlString = sqlString &_
		"And f2.MID = "& memberID &" "
	  End If
	  sqlString = sqlString &_
	  "and f2.id in (select distinct f.HTID " &_
	  "from forum f " &_
	  "where 1 = 1 "
	  If sokord <> "" Then
		sqlString = sqlString &_
		"and f.rubrik like '%"& sokord &"%' " &_
		"or f.inlagg like '%"& sokord &"%' " 
	  End if
		If memberID <> "" Then
	      sqlString = sqlString &_
		  "And f.MID = "& memberID &" "
	  End If
	  sqlString = sqlString &_
	  "and 1 = 1 )"
	End If
	sqlString = sqlString &_
	"order by f2.senast desc "
376 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
117 ms — deklarationer (db)
0 ms — hämta statistik (cache)
256 ms — hämta tråd, inlägg och bilagor (db)
117 ms — ändringar (db)