sql >> Database teknologi >  >> RDS >> Mysql

Implementering af Mysql json-baserede trendtags

Jeg kan ikke se en god grund til, hvorfor du bruger JSON her. Det er heller ikke klart, hvorfor du mener, at et "nosql-skema " inden for MySQL ville gøre alt bedre.

Hvad du sandsynligvis har brug for, er noget som dette:

CREATE TABLE TAG_COUNTER (
    account       varchar(36) NOT NULL,
    time_id       INT NOT NULL,
    tag_name      varchar(50) NOT NULL,
    counter       INT UNSIGNED NOT NULL,
    PRIMARY KEY   (account, time_id, tag_name)
);

Dette vil forenkle dine forespørgsler. INSERT-sætningen ville se sådan ud:

INSERT INTO TAG_COUNTER
  (account, time_id, tag_name, counter)
VALUES
  ('google', 2018061023, 'tag1', 1),
  ('google', 2018061023, 'tag2', 1)
ON DUPLICATE KEY UPDATE counter = counter + VALUES(counter);

SELECT-sætningen kan være sådan her

SELECT
    SUBSTRING(time_id, 1, 6) AS month,
    tag_name,
    SUM(counter) AS counter_agg
FROM TAG_COUNTER
GROUP BY month, tag_name
ORDER BY month, counter_agg DESC;

Bemærk, at jeg ikke forsøgte at optimere tabellen/skemaet til datastørrelse og ydeevne. Det ville være et andet spørgsmål. Men du skal se, at forespørgslerne er meget enklere nu.



  1. Sådan nulstilles MySQL eller MariaDB Root Password i Linux

  2. Hvordan bruger man IN-operator med JDBI?

  3. Sådan sletter du en række i SQL

  4. Kan ikke returnere resultater fra lagret procedure ved hjælp af Python-markøren