[英]MySQL. Select last record (by created time) from second table
我通过userPhone
有2个表链接。
表用户
+-----------+-------+----------+--------+
| userPhone | name | address | car |
+-----------+-------+----------+--------+
| 096111111 | Bill | adr1 | {json} |
+-----------+-------+----------+--------+
| 097333333 | Max | adr2 | {json} |
+-----------+-------+----------+--------+
| 098888888 | Denis | adr3 | {json} |
+-----------+-------+----------+--------+
表顺序
+-----------+---------+-------+-------+------------+
| userPhone | orderID | title | Descr | createdTS |
+-----------+---------+-------+-------+------------+
| 096111111 | 59 | ttl1 | qqqq | 1444999740 |
+-----------+---------+-------+-------+------------+
| 096111111 | 58 | ttl2 | wwww | 1444999650 |
+-----------+---------+-------+-------+------------+
| 096111111 | 56 | ttl3 | rrrrr | 1444999600 |
+-----------+---------+-------+-------+------------+
| 096111111 | 57 | ttl4 | ttttt | 1444999540 |
+-----------+---------+-------+-------+------------+
我正在使用这样的请求,并且效果很好:
SELECT
`users`.`userPhone`,
`users`.`name`,
`users`.`address`,
`users`.`car`,
(SELECT `title` FROM `orders` WHERE `orders`.`userPhone` = `users`.`userPhone` AND `orders`.`orderTS` < NOW() ORDER BY `orders`.`createdTS` DESC LIMIT 1 ) as `title`,
(SELECT `descr` FROM `orders` WHERE `orders`.`userPhone` = `users`.`userPhone` AND `orders`.`orderTS` < NOW() ORDER BY `orders`.`createdTS` DESC LIMIT 1 ) as `descr`
FROM
`users`
LEFT JOIN `orders` USING (`userPhone`)
WHERE
`users`.`userPhone` like '%1111%';
但是我认为其他SELECT的工作速度很慢。 有没有更好,更快的解决方法?
如何使用另一个请求获得相同的结果(可能没有其他SELECT)。
语法正确的JOIN将为您完成所有这些操作,而无需内部SELECT且速度更快。
SELECT
`users`.`userPhone`,
`users`.`name`,
`users`.`address`,
`users`.`car`,
`orders`.`title`,
`orders`.`desc`
FROM `users`
JOIN `orders` ON `orders`.`phone` = `users`.`phone`
WHERE
`users`.`userPhone` like '%1111%'
AND `orders`.`orderTS` < NOW()
ORDER BY `orders`.`orderTS` DESC
LIMIT 1;
如果您想要所有这些记录,则只需删除LIMIT 1
如果您使用内部SELECT,则不需要JOIN或LEFT JOIN任何表
尝试这个
SELECT
`users`.`userPhone`,
`users`.`name`,
`users`.`address`,
`users`.`car`,
(SELECT `title` FROM `orders` WHERE `orders`.`userPhone` = `users`.`userPhone` AND `orders`.`orderTS` < NOW() ORDER BY `orders`.`createdTS` DESC LIMIT 1 ) as `title`,
(SELECT `descr` FROM `orders` WHERE `orders`.`userPhone` = `users`.`userPhone` AND `orders`.`orderTS` < NOW() ORDER BY `orders`.`createdTS` DESC LIMIT 1 ) as `descr`
FROM
`users`
WHERE
`users`.`userPhone` like '%1111%';
这应该更快
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.