Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Triển khai thẻ xu hướng dựa trên Mysql json

Tôi không thấy lý do chính đáng, tại sao bạn sử dụng JSON ở đây. Nó cũng không rõ ràng, tại sao bạn tin rằng một " giản đồ nosql "trong MySQL sẽ làm mọi thứ tốt hơn.

Những gì bạn có thể cần là một cái gì đó như thế này:

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

Điều này sẽ đơn giản hóa các truy vấn của bạn. Câu lệnh INSERT sẽ giống như sau:

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

Câu lệnh SELECT có thể giống như thế này

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;

Lưu ý rằng tôi đã không cố gắng tối ưu hóa bảng / lược đồ cho kích thước và hiệu suất dữ liệu. Đó sẽ là một câu hỏi khác. Nhưng bạn phải thấy rằng các truy vấn bây giờ đơn giản hơn nhiều.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách cài đặt cơ sở dữ liệu MariaDB trong Debian 10

  2. Cách chuyển tất cả cơ sở dữ liệu MySQL từ máy chủ cũ sang máy chủ mới

  3. Một MySQL DELETE thành công trả về điều gì? Làm cách nào để kiểm tra xem XÓA có thành công không?

  4. Chúng ta có thể đặt tên bảng dưới dạng tùy chọn trong MySQL không?

  5. Xuất tất cả các lỗi PHP vào cơ sở dữ liệu không error_log