Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

αναζήτηση πολλαπλών keywords

Îåêßíçóå áðü ôï ìÝëïò agmarios. Τελευταία δημοσίευση από το μέλος agmarios στις 27-06-2006, 12:16. Υπάρχουν 1 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  27-06-2006, 12:02 14257

    αναζήτηση πολλαπλών keywords

    έχω έναν πίνακα
    create table fl_company(
    cmId int identity(1,1) constraint companyPK primary key,
    cmName varchar(128) not null,
    .....
    )

    και θέλω να φτιάξω ένα stored procedure που θα παίρνει μια varchar parameter, θα την σπάει σε keywords, θα κάνει αναζήτηση στο cmName και θα επιστρέφει κάποια πεδία. Βρήκα ένα function που κάνει το splitCREATE FUNCTION dbo.Split(@String varchar(4000), @Delimiter char(1))
    RETURNS @Results TABLE (Items varchar(4000))
    AS

        BEGIN
        DECLARE @INDEX INT
        DECLARE @SLICE varchar(4000)
        -- HAVE TO SET TO 1 SO IT DOESNT EQUAL Z
        --     ERO FIRST TIME IN LOOP
        SELECT @INDEX = 1
        -- following line added 10/06/04 as null
        --      values cause issues
        IF @String IS NULL RETURN
        WHILE @INDEX !=0

            BEGIN 
             -- GET THE INDEX OF THE FIRST OCCURENCE OF THE SPLIT CHARACTER
             SELECT @INDEX = CHARINDEX(@Delimiter,@STRING)
             -- NOW PUSH EVERYTHING TO THE LEFT OF IT INTO THE SLICE VARIABLE
             IF @INDEX !=0
              SELECT @SLICE = LEFT(@STRING,@INDEX - 1)
             ELSE
              SELECT @SLICE = @STRING
             -- PUT THE ITEM INTO THE RESULTS SET
             INSERT INTO @Results(Items) VALUES(@SLICE)
             -- CHOP THE ITEM REMOVED OFF THE MAIN STRING
             SELECT @STRING = RIGHT(@STRING,LEN(@STRING) - @INDEX)
             -- BREAK OUT IF WE ARE DONE
             IF LEN(@STRING) = 0 BREAK
        END

        RETURN
    END

    πώς μπορώ να κάνω όμως το search τώρα;

    create procedure findManyKeywords
    @manyKeywords varchar(4000)
    as
    declare @keywords table(items varchar(4000))
    @keywords = dbo.split(@manyKeywords,',')
    -- και τώρα;
    -- τι γίνεται;
    go

    μήπως είναι καλύτερα να κάνω το search μεσα στο function Και να εισάγω στον πίνακα που επιστρέφει τα αποτελέσματα;

  •  27-06-2006, 12:16 14259 σε απάντηση της 14257

    Απ: αναζήτηση πολλαπλών keywords

    έβαλα το search μέσα στο function και έπαιξε, αλλά χρειάζομαι την γνώμη σας για την επιλογή μου



    CREATE FUNCTION dbo.Split(@String nvarchar(4000), @Delimiter char(1))
    RETURNS @Results TABLE (cmId int,cmName varchar(128))
    AS

        BEGIN
        DECLARE @INDEX INT
        DECLARE @SLICE nvarchar(4000)
        -- HAVE TO SET TO 1 SO IT DOESNT EQUAL Z
        --     ERO FIRST TIME IN LOOP
        SELECT @INDEX = 1
        -- following line added 10/06/04 as null
        --      values cause issues
        IF @String IS NULL RETURN
        WHILE @INDEX !=0

            BEGIN 
             -- GET THE INDEX OF THE FIRST OCCURENCE OF THE SPLIT CHARACTER
             SELECT @INDEX = CHARINDEX(@Delimiter,@STRING)
             -- NOW PUSH EVERYTHING TO THE LEFT OF IT INTO THE SLICE VARIABLE
             IF @INDEX !=0
              SELECT @SLICE = LEFT(@STRING,@INDEX - 1)
             ELSE
              SELECT @SLICE = @STRING
             -- PUT THE ITEM INTO THE RESULTS SET
             INSERT INTO @Results(cmId,cmName) 
            SELECT cmId,cmName
            FROM fl_company
            WHERE cmName like '%'+ @SLICE + '%'
             -- CHOP THE ITEM REMOVED OFF THE MAIN STRING
             SELECT @STRING = RIGHT(@STRING,LEN(@STRING) - @INDEX)
             -- BREAK OUT IF WE ARE DONE
             IF LEN(@STRING) = 0 BREAK
        END

        RETURN
    END

Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems