11. januar 2004 - 15:16
Der er
22 kommentarer og 2 løsninger
Hvordan difinere man, dette i sin sql streng?
På min søge side, vil jeg have at man skal kunne vælge følgende: <option value="0">Match alle ord</option> <option value="1">Match nogle ord</option> <option value="2">Match hele sætningen</option> Hvordan skal min sql se ud? Mvh /MF :-)
Annonceindlæg fra Computerworld
11. januar 2004 - 15:23
#1
Søgeord: "A B C" Din applikation parser til "A" og "B" og "C" 0 => WHERE F LIKE '%A%' AND F LIKE '%B%' AND F LIKE '%C%' 1 => WHERE F LIKE '%A%' OR F LIKE '%B%' OR F LIKE '%C%' 2 => WHERE F = "A B C" vil jeg tro
11. januar 2004 - 15:30
#2
tak! :-) det giver ihvertfald mening i mit hoved det der arne_v
11. januar 2004 - 15:33
#3
så vil jeg ligge et svar
11. januar 2004 - 22:42
#4
>>> arne_v i dit sidte eksempel 2 => ser den sql rigtig ud i dinne øjne? "WHERE (F.Topic = '%" & (searchString).ToString & "%' " & _ "OR F.Post = '%" & (searchString).ToString & "%' " & _ "OR F.DateAdded = '%" & (searchString).ToString & "%' " & _ --------------- Må jeg poste alle mine 3 sql sætninger til dig, så du lige kan spotte dem?
11. januar 2004 - 22:46
#5
Umiddelbart ser det OK (jeg er ikke skrap til VB/ASP). Men det er jo noget helt andet - her søger du efter samme søge streng i flere felter - før snakkede vi om forskellige søge strenge i samme felt.
11. januar 2004 - 22:46
#6
jeg for nemmelig denne exception: Exception Details: System.Data.SqlClient.SqlException: The text, ntext, and image data types cannot be compared or sorted, except when using IS NULL or LIKE operator. når jeg bruger: <option value="2">Match hele sætningen</option>
11. januar 2004 - 22:52
#7
Prøv lige og erstat de = tegn med LIKE !
11. januar 2004 - 22:52
#8
"WHERE (F.Topic LIKE '%" & (searchString).ToString & "%' " & _ "OR F.Post LIKE '%" & (searchString).ToString & "%' " & _ "OR F.DateAdded LIKE '%" & (searchString).ToString & "%' " & _
11. januar 2004 - 22:54
#9
jeg poster lige mine 3 sql strenge, håber ikke du løber væk! ;-) Så kan du bedre se det: With cm .CommandText = "SET NOCOUNT ON " & _ "SELECT A.Forum, A.Forum_Description, F.PostID, F.ForumID, F.UserID, F.Topic, F.Post, F.DateAdded, R.Reply, R.DateAdded , U.UserName " & _ "FROM (((tblECForum_Posts AS F " & _ "INNER JOIN tblECForum_Replies AS R " & _ "ON F.PostID=R.PostID) " & _ "INNER JOIN tblUser_Accounts AS U " & _ "ON F.UserID=U.UserID) " & _ "INNER JOIN tblECForum_Forums As A " & _ "ON A.ForumID=F.ForumID) " & _ "WHERE (F.Topic LIKE '%" & (searchString).ToString & "%' " & _ "AND F.Post LIKE '%" & (searchString).ToString & "%' " & _ "AND F.DateAdded LIKE '%" & (searchString).ToString & "%' " & _ "AND R.Reply LIKE '%" & (searchString).ToString & "%' " & _ "AND R.DateAdded LIKE '%" & (searchString).ToString & "%' " & _ "AND U.UserName LIKE '%" & (searchString).ToString & "%') " & _ "ORDER BY F.DateAdded;" .CommandType = CommandType.Text .Parameters.Add(New SqlParameter("@ForumID", SqlDbType.Int, 4)).Value = forumId .Parameters.Add(New SqlParameter("@Post", SqlDbType.Text)).Value = post .Parameters.Add(New SqlParameter("@Publisher", SqlDbType.VarChar, 50)).Value = publisher .Connection = cn End With Case 1 'Match nogle ord... With cm .CommandText = "SET NOCOUNT ON " & _ "SELECT A.Forum, A.Forum_Description, F.PostID, F.ForumID, F.UserID, F.Topic, F.Post, F.DateAdded, R.Reply, R.DateAdded , U.UserName " & _ "FROM (((tblECForum_Posts AS F " & _ "INNER JOIN tblECForum_Replies AS R " & _ "ON F.PostID=R.PostID) " & _ "INNER JOIN tblUser_Accounts AS U " & _ "ON F.UserID=U.UserID) " & _ "INNER JOIN tblECForum_Forums As A " & _ "ON A.ForumID=F.ForumID) " & _ "WHERE (F.Topic LIKE '%" & (searchString).ToString & "%' " & _ "OR F.Post LIKE '%" & (searchString).ToString & "%' " & _ "OR F.DateAdded LIKE '%" & (searchString).ToString & "%' " & _ "OR R.Reply LIKE '%" & (searchString).ToString & "%' " & _ "OR R.DateAdded LIKE '%" & (searchString).ToString & "%' " & _ "OR U.UserName LIKE '%" & (searchString).ToString & "%') " & _ "ORDER BY F.DateAdded;" .CommandType = CommandType.Text .Parameters.Add(New SqlParameter("@ForumID", SqlDbType.Int, 4)).Value = forumId .Parameters.Add(New SqlParameter("@Post", SqlDbType.Text)).Value = post .Parameters.Add(New SqlParameter("@Publisher", SqlDbType.VarChar, 50)).Value = publisher .Connection = cn End With Case 2 'Match hele sætningen... With cm .CommandText = "SET NOCOUNT ON " & _ "SELECT A.Forum, A.Forum_Description, F.PostID, F.ForumID, F.UserID, F.Topic, F.Post, F.DateAdded, R.Reply, R.DateAdded , U.UserName " & _ "FROM (((tblECForum_Posts AS F " & _ "INNER JOIN tblECForum_Replies AS R " & _ "ON F.PostID=R.PostID) " & _ "INNER JOIN tblUser_Accounts AS U " & _ "ON F.UserID=U.UserID) " & _ "INNER JOIN tblECForum_Forums As A " & _ "ON A.ForumID=F.ForumID) " & _ "WHERE (F.Topic = '%" & (searchString).ToString & "%' " & _ "OR F.Post = '%" & (searchString).ToString & "%' " & _ "OR F.DateAdded = '%" & (searchString).ToString & "%' " & _ "OR R.Reply = '%" & (searchString).ToString & "%' " & _ "OR R.DateAdded = '%" & (searchString).ToString & "%' " & _ "OR U.UserName = '%" & (searchString).ToString & "%');" '"ORDER BY F.DateAdded;" .CommandType = CommandType.Text .Parameters.Add(New SqlParameter("@ForumID", SqlDbType.Int, 4)).Value = forumId .Parameters.Add(New SqlParameter("@Post", SqlDbType.Text)).Value = post .Parameters.Add(New SqlParameter("@Publisher", SqlDbType.VarChar, 50)).Value = publisher .Connection = cn End With
11. januar 2004 - 22:57
#10
du kan godt se forskellen ikke.... jeg har gjort som du har forslået. 0: AND F.Post LIKE '%" & (searchString).ToString & "%' " 1: OR F.Post LIKE '%" & (searchString).ToString & "%' " 2: OR F.Post = '%" & (searchString).ToString & "%' " ----------------------- det er nummer 2 der fejler
11. januar 2004 - 23:19
#11
Alle steder hvor du har % skal du også bruge LIKE og ikke =.
11. januar 2004 - 23:23
#12
hehe okay.... Hvordan løser jeg midt problem, syntes du?
11. januar 2004 - 23:25
#13
Brug af LIKE løste ikke problemet ?
11. januar 2004 - 23:29
#14
jo men så er den jo præcis magen til, 1 'Match nogle ord... :-(
11. januar 2004 - 23:33
#15
Jamen - den SQL har jo ikke meget med det oprindelige spørgsmål at gøre. Som jeg skrev tidligere: Men det er jo noget helt andet - her søger du efter samme søge streng i flere felter - før snakkede vi om forskellige søge strenge i samme felt.
11. januar 2004 - 23:40
#16
hmmmmmm...... men om den skal kigge i et eller flere felter er da ligemeget.
11. januar 2004 - 23:43
#17
Ja. Men det er ikke lige meget om du har en flerd ords søge streng "a b c" eller 3 opslittede søge strenge "a", "b" og "c". Det er nemlig det som er forskellen på de 2 sidste !
11. januar 2004 - 23:45
#18
ja okay.... men hvordan splitter jeg dem nemmest op så?
11. januar 2004 - 23:51
#19
Det er VB.NET du koder i ikke ? Dim srchstr As string Dim parts() as String = srchstr.Split(" ")
11. januar 2004 - 23:57
#20
yes det er så... okay, hvordan smider jeg min searchstring ind i den parts() der?
12. januar 2004 - 00:00
#21
Det er det som Split gør ! Den deler srchstr op ved mellemrum og assigner over i et array.
12. januar 2004 - 00:07
#22
ahhh det er mig der tåger.... okay lige en sidste ting, bare lige for at få det hele på det rene? 0: 'Match alle ord: er korrekt? 1: 'Match nogle ord: har jeg inkluderet Dim parts() As String = searchString.Split(New Char().Parse(" ")) 2: 'Match hele sætningen... Den skal ikke splittes op vel?
12. januar 2004 - 17:52
#23
0: er AND på parts'ene 1: er OR på parts'ene 2: er uden split
12. januar 2004 - 20:02
#24
tak for din tid arne_v ;-)
Computerworld tilbyder specialiserede kurser i database-management