Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Implementacja tagów trendów opartych na Mysql json

Nie widzę powodu, dla którego używasz tutaj JSON. Nie jest również jasne, dlaczego uważasz, że „schemat nosql " w MySQL zrobi coś lepszego.

To, czego prawdopodobnie potrzebujesz, to coś takiego:

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)
);

To uprości Twoje zapytania. Instrukcja INSERT wyglądałaby tak:

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);

Instrukcja SELECT może wyglądać mniej więcej tak

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;

Zauważ, że nie próbowałem optymalizować tabeli/schematu pod kątem rozmiaru danych i wydajności. To byłoby inne pytanie. Ale musisz zobaczyć, że zapytania są teraz znacznie prostsze.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Klasa połączenia bazy danych PHP

  2. Błąd uruchamiania serwera MySQL „Serwer został zamknięty bez aktualizacji pliku PID”

  3. Lexing częściowego SQL w C#

  4. Jak mogę chronić się przed atakami typu SQL injection za pomocą DBI Perla?

  5. Czy mogę na ślepo zastąpić wszystkie funkcje mysql_ mysqli_?