Tôi biết câu hỏi này đã được hỏi nhiều lần, nhưng tôi gặp sự cố khi triển khai nó.
Tôi đã thực hiện một ví dụ cắt giảm để dễ tái sản xuất.
Tôi muốn tham gia 3 bảng nhưng trên người cuối cùng tôi muốn giới hạn đến 2 hàng DESC
THAM GIA 3 bảng và (GIỚI HẠN 2 hàng ĐẶT HÀNG THEO D timeI DESC)
CREATE TABLE `cars` (
`car_id` int(11) NOT NULL AUTO_INCREMENT,
`plate` varchar(10) NOT NULL,
`km` int(11) NOT NULL,
`status` tinyint(1) NOT NULL,
PRIMARY KEY (`car_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ;
INSERT INTO `cars` (`car_id`, `plate`, `km`, `status`) VALUES
(1, 'ABC1234', 130123, 1),
(2, 'DEF1234', 100123, 1),
(3, 'QWE1234', 5000, 1),
(4, 'ASD1234', 3000, 1),
(5, 'ZXC1234', 23000, 0);
CREATE TABLE `cars_to_users` (
`car_id` int(11) NOT NULL,
`user_id` int(11) NOT NULL,
UNIQUE KEY `car_id` (`car_id`,`user_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
INSERT INTO `cars_to_users` (`car_id`, `user_id`) VALUES
(1, 1),
(2, 1),
(3, 2),
(4, 2),
(5, 2);
CREATE TABLE `service` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`car_plate` varchar(10) NOT NULL,
`s_timestamp` int(10) NOT NULL,
`price` double NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=111 ;
INSERT INTO `service` (`id`, `car_plate`, `s_timestamp`, `price`) VALUES
(1, 'ABC1234', 1312300100, 30),
(2, 'DEF1234', 1312300100, 15),
(3, 'QWE1234', 1312300100, 16),
(4, 'ASD1234', 1312300100, 50),
(5, 'ABC1234', 1312300200, 50),
(6, 'DEF1234', 1312300200, 25),
(7, 'QWE1234', 1312300200, 30),
(8, 'ABC1234', 1312300300, 20),
(9, 'ASD1234', 1312300300, 60),
(10, 'ABC1234', 1312300400, 15),
(11, 'ASD1234', 1312300400, 20);
Những gì tôi muốn là này
car_id plate km car_plate s_timestamp price
3 QWE1234 5000 QWE1234 1312300200 30
3 QWE1234 5000 QWE1234 1312300100 16
4 ASD1234 3000 ASD1234 1312300400 20
4 ASD1234 3000 ASD1234 1312300300 60
2 hàng từ "s ervice "bảng cho mỗi chiếc xe của user_id = 2 lệnh của s_timestamp DESC
ORDER BY s_timestamp LIMIT 2 DESC
tôi cố gắng truy vấn này nhưng mang lại cho tôi tất cả các hàng từ "dịch vụ"
SELECT ctu.user_id, c.car_id, c.plate, c.km, s.car_plate, s.s_timestamp, s.price
FROM cars_to_users ctu
LEFT JOIN cars c ON ctu.car_id = c.car_id
LEFT JOIN service s ON c.plate = s.car_plate
WHERE ctu.user_id = '2'
AND c.status = 1
Nếu tôi thêm" GROUP BY c .car_id "Tôi chỉ nhận được 1 hàng cho mỗi xe và không phải 2 Tôi muốn
Tôi thử nhiều truy vấn nhưng không nhận được những gì tôi muốn.
Điều cần lưu ý là bảng "dịch vụ" có hơn 9 triệu hàng và nhiều dữ liệu hơn ví dụ và lớn lên.
phiên bản mysql mà bạn đang sử dụng như bạn đã nói giới hạn không hoạt động trên phiên bản của bạn là gì ??? – reggie
Bạn có thể sử dụng các câu lệnh của tôi hay không, sử dụng các bảng tạm thời nên làm cho nó nhanh hơn một chút. – ace
@ace Giải pháp của bạn hoạt động rất tốt. Nhưng nếu cùng một điều có thể đạt được thông qua một truy vấn phụ và số lượng hàng được lấy ra trong bảng truy vấn con/temp chỉ là 2, tại sao không sử dụng truy vấn phụ thay thế. – reggie