Help with SQL "sets"

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • glakk@potatoradio.f2s.com

    #1

    Help with SQL "sets"

    I want to build an application that would let people search records of
    content, based on keywords. The content record table would have a field
    called 'tags' which would be a comma-seperated string of keywords. It
    would be very simple to search for records where the user enters only
    one keyword, by searching for the keyword within the keyword string
    in the record.

    But I'd like to let the user enter more than one keyword, and be able
    to select records that have -any- keywords that match -any- of the
    keywords the user enters. And, have the results sorted by how many
    matching keywords are found.

    I know that MySQL has a "set" data type, but I have no idea whether
    it would apply to this problem, or how to use it.

    Can anyone help?
    TIA,

  • Jerry Stuckle

    #2
    Re: Help with SQL "sets&quot ;

    glakk@potatorad io.f2s.com wrote:[color=blue]
    > I want to build an application that would let people search records of
    > content, based on keywords. The content record table would have a field
    > called 'tags' which would be a comma-seperated string of keywords. It
    > would be very simple to search for records where the user enters only
    > one keyword, by searching for the keyword within the keyword string
    > in the record.
    >
    > But I'd like to let the user enter more than one keyword, and be able
    > to select records that have -any- keywords that match -any- of the
    > keywords the user enters. And, have the results sorted by how many
    > matching keywords are found.
    >
    > I know that MySQL has a "set" data type, but I have no idea whether
    > it would apply to this problem, or how to use it.
    >
    > Can anyone help?
    > TIA,
    >[/color]

    Look into normalizing databases.

    A properly normalized database would never have multiple fields in a
    column like this. Rather, create another table which two columns. The
    first column is an id from the first table; the second column is ONE
    keyword.

    Now you can search the second table and get the appropriate keys for the
    rows in the first table.


    --
    =============== ===
    Remove the "x" from my email address
    Jerry Stuckle
    JDS Computer Training Corp.
    jstucklex@attgl obal.net
    =============== ===

    Comment

    • Peter Fox

      #3
      Re: Help with SQL "sets&quot ;

      Following on from 's message. . .[color=blue]
      >I know that MySQL has a "set" data type, but I have no idea whether
      >it would apply to this problem, or how to use it.[/color]

      Use Text and Full Text Search. This does all you want and probably with
      a great deal less constraints than what you are thinking of. Using a
      SET field definitely sounds like the wrong thing unless there are only a
      few dozen fixed key words. The manual explains it all.


      --
      PETER FOX Not the same since the bridge building business collapsed
      peterfox@eminen t.demon.co.uk.n ot.this.bit.no. html
      2 Tees Close, Witham, Essex.
      Gravity beer in Essex <http://www.eminent.dem on.co.uk>

      Comment

      • glakk@potatoradio.f2s.com

        #4
        Re: Help with SQL &quot;sets&quot ;



        Jerry Stuckle wrote:[color=blue]
        > glakk@potatorad io.f2s.com wrote:[color=green]
        > > I want to build an application that would let people search records of
        > > content, based on keywords. The content record table would have a field
        > > called 'tags' which would be a comma-seperated string of keywords. It
        > > would be very simple to search for records where the user enters only
        > > one keyword, by searching for the keyword within the keyword string
        > > in the record.[/color][/color]

        [...]
        [color=blue]
        > A properly normalized database would never have multiple fields in a
        > column like this. Rather, create another table which two columns. The
        > first column is an id from the first table; the second column is ONE
        > keyword.[/color]

        That makes perfect sense, but I'm still unsure about how to query the
        tables with multiple search targets.[color=blue]
        >
        > Now you can search the second table and get the appropriate keys for the
        > rows in the first table.[/color]

        It's really a problem with syntax I'm having. I can intuit a query to
        select
        records given ONE search keyword, but more than one? It's in the
        'where'
        clause that I'm stumped. RTFM time, I guess. And MySQL documentation is
        nowhere as easy to use as PHP's ref.

        At least I know that sets won't do it.

        Thanks.

        Comment

        • Jerry Stuckle

          #5
          Re: Help with SQL &quot;sets&quot ;

          glakk@potatorad io.f2s.com wrote:[color=blue]
          >
          >
          > It's really a problem with syntax I'm having. I can intuit a query to
          > select
          > records given ONE search keyword, but more than one? It's in the
          > 'where'
          > clause that I'm stumped. RTFM time, I guess. And MySQL documentation is
          > nowhere as easy to use as PHP's ref.
          >
          > At least I know that sets won't do it.
          >
          > Thanks.
          >[/color]

          OK, lets say you have:

          Table1 Table2
          id primary key id foreign key on Table1(id)
          other stuff Keyword

          If MySQL supported the INTERSECT SQL clause, this would be easier.
          However, without INTERSECT, it's still possible, i.e. (not checked...)

          SELECT * FROM Table1 WHERE
          id IN (SELECT id FROM Table2 WHERE Keyword='Kwd1') AND
          id IN (SELECT id FROM Table2 WHERE Keyword='Kwd2') AND
          id IN (SELECT id FROM Table2 WHERE Keyword='Kwd3') ;

          This gives you all the columns in all rows in Table1 which contain kwd1
          kwd2 and kwd3 (assuming Table2 is set up correctly).



          --
          =============== ===
          Remove the "x" from my email address
          Jerry Stuckle
          JDS Computer Training Corp.
          jstucklex@attgl obal.net
          =============== ===

          Comment

          Working...