How to find most popular word occurrences in MySQL?

后端 未结 6 2306
猫巷女王i
猫巷女王i 2021-02-13 11:38

I have a table called results with 5 columns.

I\'d like to use the title column to find rows that are say: WHERE title like \'%for sale%\

6条回答
  •  走了就别回头了
    2021-02-13 12:09

    Here is working SQL Fiddle: http://sqlfiddle.com/#!9/0b0a0/32

    Let's start with two tables - one for texts and one for numbers:

    CREATE TABLE text (`title` varchar(29));
    
    INSERT INTO text
        (`title`)
    VALUES
        ('cheap cars for sale'),
        ('house for sale'),
        ('cats and dogs for sale'),
        ('iphones and androids for sale'),
        ('cheap phones for sale'),
        ('house furniture for sale')
    ;
    
    CREATE TABLE iterator (`index` int);
    
    INSERT INTO iterator
        (`index`)
    VALUES
        (1),(2),(3),(4),(5),(6),(7),(8),(9),(10),(11),(12),(13),(14),(15),
        (16),(17),(18),(19),(20),(21),(22),(23),(24),(25),(26),(27),(28),(29),(30)
    ;
    

    The second table, iterator must contains numbers from 1 to N where N higher or equal to the lenght of the longest string in text.

    Then, run this query:

    select
      words.word, count(*) as `count`
    from 
    (select
      substring(concat(' ', t.title, ' '), i.index+1, j.index-i.index) as word
    from
      text as t, iterator as i, iterator as j
    where
        substring(concat(' ', t.title), i.index, 1) = ' '
    and substring(concat(t.title, ' '), j.index, 1) = ' '
    and i.index < j.index
    ) AS words
    where
        length(words.word) > 0
    and words.word not like '% %'
    group by words.word
    order by `count` desc, words.word asc
    

    There are two selects. Outer one simply groups and counts single words (words of length greater than 0 and without any spaces). Inner one extracts all strings starting from any space character and ending with any other space character, so strings aren't words (despite naming this subquery words) because they can contain other spaces than starting and ending one.

    Results:

    word    count
    for     6
    sale    6
    and     2
    cheap   2
    house   2
    androids    1
    cars    1
    cats    1
    dogs    1
    furniture   1
    iphones     1
    phones  1
    

提交回复
热议问题