Mysql
 sql >> Base de données >  >> RDS >> Mysql

sélectionnez l'enregistrement en double et comptez l'enregistrement à partir d'une virgule séparée dans mysql

La première chose est que vous devez normaliser votre structure, vous débarrasser des valeurs séparées par des virgules et utiliser un autre tableau pour relier vos emplacements à votre tableau de messages, voir Normalisation de la base de données , pour votre structure actuelle, ce que vous pouvez faire est d'obtenir tous les emplacements de votre table et de les insérer dans une nouvelle table, puis d'utiliser la fonction d'agrégation sur votre nouvelle table

CREATE TABLE locaions (cities CHAR(255)) ;

SET @S1 = CONCAT(
  "INSERT INTO locaions (cities) VALUES ('",
  REPLACE(
    (SELECT 
      GROUP_CONCAT(`Location`) AS DATA 
    FROM
      `posts`),
    ",",
    "'),('"
  ),
  "');"
) ;

PREPARE stmt1 FROM @s1 ;

EXECUTE stmt1 ;

Cela insérera tous les emplacements avec des données répétées dans le tableau des emplacements, puis utilisera la requête ci-dessous pour obtenir le nombre souhaité

SELECT cities,count(*) 
FROM locaions 
group by cities

Démo