Avatar billede master_fatman Nybegynder
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

:-)
Avatar billede arne_v Ekspert
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
Avatar billede master_fatman Nybegynder
11. januar 2004 - 15:30 #2
tak!

:-)

det giver ihvertfald mening i mit hoved det der arne_v
Avatar billede arne_v Ekspert
11. januar 2004 - 15:33 #3
så vil jeg ligge et svar
Avatar billede master_fatman Nybegynder
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?
Avatar billede arne_v Ekspert
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.
Avatar billede master_fatman Nybegynder
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>
Avatar billede arne_v Ekspert
11. januar 2004 - 22:52 #7
Prøv lige og erstat de = tegn med LIKE !
Avatar billede arne_v Ekspert
11. januar 2004 - 22:52 #8
"WHERE (F.Topic LIKE '%" & (searchString).ToString & "%' " & _
"OR F.Post LIKE '%" & (searchString).ToString & "%' " & _
"OR F.DateAdded LIKE '%" & (searchString).ToString & "%' " & _
Avatar billede master_fatman Nybegynder
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
Avatar billede master_fatman Nybegynder
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
Avatar billede arne_v Ekspert
11. januar 2004 - 23:19 #11
Alle steder hvor du har % skal du også bruge LIKE og ikke =.
Avatar billede master_fatman Nybegynder
11. januar 2004 - 23:23 #12
hehe okay....

Hvordan løser jeg midt problem, syntes du?
Avatar billede arne_v Ekspert
11. januar 2004 - 23:25 #13
Brug af LIKE løste ikke problemet ?
Avatar billede master_fatman Nybegynder
11. januar 2004 - 23:29 #14
jo men så er den jo præcis magen til, 1 'Match nogle ord...

:-(
Avatar billede arne_v Ekspert
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.
Avatar billede master_fatman Nybegynder
11. januar 2004 - 23:40 #16
hmmmmmm......

men om den skal kigge i et eller flere felter er da ligemeget.
Avatar billede arne_v Ekspert
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 !
Avatar billede master_fatman Nybegynder
11. januar 2004 - 23:45 #18
ja okay....

men hvordan splitter jeg dem nemmest op så?
Avatar billede arne_v Ekspert
11. januar 2004 - 23:51 #19
Det er VB.NET du koder i ikke ?

Dim srchstr As string
Dim parts() as String = srchstr.Split(" ")
Avatar billede master_fatman Nybegynder
11. januar 2004 - 23:57 #20
yes det er så...

okay, hvordan smider jeg min searchstring ind i den parts() der?
Avatar billede arne_v Ekspert
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.
Avatar billede master_fatman Nybegynder
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?
Avatar billede arne_v Ekspert
12. januar 2004 - 17:52 #23
0: er AND på parts'ene
1: er OR på parts'ene
2: er uden split
Avatar billede master_fatman Nybegynder
12. januar 2004 - 20:02 #24
tak for din tid arne_v

;-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester