我知道這個問題已經被問了很多次了,但是我在執行時遇到了問題。
我做了一個減少的例子,所以很容易重現。
我想加入3個表,但在最後一個我想限制在2行DESC
加入3個表格和(限制2行ORDER BY time 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);
我要的是這個
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行來自「s ervice「表中USER_ID的每一輛= 2的s_timestamp降序排列
ORDER BY s_timestamp LIMIT 2 DESC
我嘗試此查詢,但給我的一切,從行‘服務’
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
如果我添加」 GROUP BYÇ .car_id」我只得到1行每車,而不是2我想
我嘗試了很多疑問,但沒有得到我想要的東西。
要記住一件事是,表中的「服務」擁有超過900萬行的數據超出例子,長大。
你使用的mysql版本是什麼,你說的限制不適用於你的版本? – reggie
如果你能夠使用我的語句,使用臨時表應該使它快一點。 – ace
@ace您的解決方案也很棒。但是,如果通過子查詢可以達到同樣的效果,並且子查詢/臨時表中要檢索的行數只有2個,那麼爲什麼不使用子查詢。 – reggie