MySql PHP select count of distinct values from comma separated data (tags)

后端 未结 5 1650
感情败类
感情败类 2020-12-01 18:38

How can I select the count of distinct values from data that is stored as comma separated values in MySql? I\'ll be using PHP to output the data from MySql in the end.

5条回答
  •  天涯浪人
    2020-12-01 19:18

    This should work:

    SELECT tag, count(0) count FROM (
        SELECT tOut.*, REPLACE(SUBSTRING(SUBSTRING_INDEX(tags, ',', ocur_rank), LENGTH(SUBSTRING_INDEX(tags, ',', ocur_rank - 1)) + 1), ',', '') tag
          FROM (
            SELECT @num_type := if(@id_check = tY.id, @num_type + 1, 1) AS ocur_rank, @id_check := tY.id as id_check, tY.*
              FROM (
                SELECT LENGTH(tags) - LENGTH(REPLACE(tags, ',', '')) AS num_ocur, id, tags FROM tablename
              ) tX
              INNER JOIN (SELECT LENGTH(tags) - LENGTH(REPLACE(tags, ',', '')) AS num_ocur, id, tags FROM tablename) tY
              INNER JOIN (SELECT @num_type := 0, @id_check := 'some_id') tZ
           ) tOut
         WHERE ocur_rank <= num_ocur + 1
    ) tempTable GROUP BY tag ORDER BY count DESC;
    

    Replace "tablename" with the name of your table.

    This answer was derived from a solution by Jesse Perring posted on this page:

    http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#c12113

提交回复
热议问题