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 tema
Cloud & AI
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
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