我有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)
您的问题中的数据和结果之间不匹配,但我认为您需要这样的查询。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。