在最接近的日期左连接

php*_*per 0 mysql join

我有2张桌子

orders
+----+-------+--------+------------+
| id | email | status | date       |
+----+-------+--------+------------+
|  1 |       |      0 | 1427953986 |
|  2 |       |      0 | 1427954771 |
|  5 |       |      0 | 1427957427 |
+----+-------+--------+------------+

price
+----+----+-----+--------+----+-----+------+-------+------------+
| id | wd | bts | family | r  | tlv | kids | user  | date       |
+----+----+-----+--------+----+-----+------+-------+------------+
|  1 |  0 |   0 |      0 | 75 | 65  | 50   | int   | 1425894693 |
|  9 | 59 |   0 |      0 | 75 | 65  | 50   | mordi | 1435666477 |
| 10 | 59 |   0 |      0 | 75 | 65  | 50   | zack  | 1438790306 |
| 11 | 59 |   0 |      0 | 75 | 65  | 50   | zack  | 1438790326 |
| 12 | 59 |   0 |      0 | 75 | 65  | 50   | zack  | 1438790468 |
+----+----+-----+--------+----+-----+------+-------+------------+
Run Code Online (Sandbox Code Playgroud)

我怎样才能在正确的日期将价格加入到订单中。结果应连接到订单表中价格表中的行,其中订单日期大于或等于价格日期,但不大于下一行(如果存在),例如

Example
+-----------+-------+--------+------------------+----------+----+-----+--------+----+-----+------+-------+--------------+
| orders.id | email | status | order.date       | price.id | wd | bts | family | r  | tlv | kids | user  | price.date       |
+-----------+-------+--------+------------------+----------+----+-----+--------+----+-----+------+-------+--------------+
|  1        |       |      0 | 1425894699       |  1       |  0 |   0 |      0 | 75 | 65  | 50   | int   | 1425894693   |
|  2        |       |      0 | 1438790336       |  11      |  0 |   0 |      0 | 75 | 65  | 50   | zack  | 1438790326   |
|  5        |       |      0 | 1438790478       |  12      |  0 |   0 |      0 | 75 | 65  | 50   | zack  | 1438790468   |
+-----------+-------+--------+------------------+----------+----+-----+--------+----+-----+------+-------+--------------+
Run Code Online (Sandbox Code Playgroud)

ype*_*eᵀᴹ 5

您的问题中的数据和结果之间不匹配,但我认为您需要这样的查询。orders如果表很大,效率不会很高:

SELECT 
    o.*,            -- pick the columns you want
    p.*             -- in the result 
FROM orders AS o
  LEFT JOIN price AS p
    ON p.date =
       ( SELECT pi.date
         FROM price AS pi
         WHERE pi.date <= o.date
         ORDER BY pi.date DESC
         LIMIT 1
       ) ;
Run Code Online (Sandbox Code Playgroud)

在以下位置进行测试(使用orders表中的修改数据):SQLfiddle