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

Cách tốt nhất và tối ưu để kết hợp giá trị tối đa từ bảng khác

Đừng làm theo cách đó, đây là một cách tốt hơn, trước tiên, thêm trường để lưu trữ trên bảng người dùng ID cuối cùng của bất kỳ mục nhập nhật ký mới nào, sau đó tạo trình kích hoạt cập nhật trường đó trên mỗi trường mới được chèn vào, sau đó ( tùy chọn) tạo một dạng xem để có một “bảng” hoàn chỉnh để truy vấn từ đó.

-- Add new field to save the modified id
ALTER TABLE `users` ADD `last_mod_id` INT(11) NOT NULL, ADD INDEX (`last_mod_id`);

-- Drop the trigger just in case it exists
DROP TRIGGER IF EXISTS `update_last_id`;

-- Create a trigger to save the last modified id each time a row is created
DELIMITER ;;
CREATE TRIGGER update_last_id 
    AFTER INSERT ON user_log
    FOR EACH ROW
    BEGIN
        UPDATE `users` 
        SET `last_mod_id` = NEW.id
        WHERE `id` = NEW.idrel;
    END;
;;

-- Emtpy your table
TRUNCATE `user_log`;

-- Create all new registries 
INSERT INTO `user_log` VALUES (1,1,'log1','2014-01-01 13:00:00');
INSERT INTO `user_log` VALUES (2,1,'log2','2014-01-02 13:00:00');
INSERT INTO `user_log` VALUES (3,2,'log3','2014-01-03 13:00:00');
INSERT INTO `user_log` VALUES (4,2,'log4','2014-01-04 13:00:00');
INSERT INTO `user_log` VALUES (5,3,'log5','2014-01-05 13:00:00');
INSERT INTO `user_log` VALUES (6,3,'log6','2014-01-06 13:00:00');


-- Query
SELECT
    u.id,
    u.name,
    u.last_mod_id,
    l.event,
    l.log
FROM
    `users` as u
INNER JOIN
    `user_log` as l
    ON (l.id = u.last_mod_id)

-- Drop view if exists
DROP VIEW IF EXISTS `users_log_view`;

-- View
CREATE VIEW `users_log_view` AS 
    SELECT
        u.id,
        u.name,
        u.last_mod_id,
        l.event,
        l.log
    FROM
        `users` as u
    INNER JOIN
        `user_log` as l
        ON (l.id = u.last_mod_id);

-- Query
SELECT * FROM `users_log_view` WHERE `id` = 1;



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nhận ngày gần nhất từ ​​bảng MySQL

  2. Tăng trường cơ sở dữ liệu lên 1

  3. Bảng cha và bảng con trong Cơ sở dữ liệu là gì?

  4. Làm cách nào để xuất cơ sở dữ liệu mysql bằng Command Prompt?

  5. JSON_CONTAINS_PATH () Ví dụ trong MySQL