Mysql r价格范围,而不是具有技巧的 SELECT p.id, MAX(p.name), MIN(v.price_per_day) AS price_low, MAX(v.price_per_day) AS price_high FROM properties p JOIN properties_prices v ON p.id = v.property_id AND v.price_per_day BETWEEN 10 AND 100 AND v.date_begin < '2010-12-31' AND v.date_end > '2010-05-01' GROUP BY p.id ORDER BY ... LIMIT 10;
这允许您的查询以尽可能最佳的方式运行,因为它可以直接从索引中读取值。它根本不需要从表中读取数据行Mysql r价格范围,而不是具有技巧的 SELECT p.id, MAX(p.name), MIN(v.price_per_day) AS price_low, MAX(v.price_per_day) AS price_high FROM properties p JOIN properties_prices v ON p.id = v.property_id AND v.price_per_day BETWEEN 10 AND 100 AND v.date_begin < '2010-12-31' AND v.date_end > '2010-05-01' GROUP BY p.id ORDER BY ... LIMIT 10;,mysql,date-range,Mysql,Date Range,这允许您的查询以尽可能最佳的方式运行,因为它可以直接从索引中读取值。它根本不需要从表中读取数据行 +----+-------------+-------+-------+-----------------+-----------------+---------+-----------+------+--------------------------+ | id | select_type | table | type | possible_keys | key |
+----+-------------+-------+-------+-----------------+-----------------+---------+-----------+------+--------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+-------+-----------------+-----------------+---------+-----------+------+--------------------------+
| 1 | SIMPLE | p | index | PRIMARY | PRIMARY | 4 | NULL | 1 | |
| 1 | SIMPLE | v | ref | prices_covering | prices_covering | 4 | test.p.id | 6 | Using where; Using index |
+----+-------------+-------+-------+-----------------+-----------------+---------+-----------+------+--------------------------+
我们快到了。。你的问题很好。我在主帖上回答了你的问题。我们马上就到了。。你的问题很好。我在主post.date_begin=“2010-05-01”s/b”和“感谢您发现这一点”上回答了您的问题。我是从我编写的sql server版本中转述的-我一定是转述错误了!date_begin=“2010-05-01”s/b”和“感谢您发现这一点。我是从我编写的sql server版本中转述的-我一定是转述错误了!
SELECT
prperty_id, MIN(price_per_day), MAX(price_per_day)
FROM
properties_prices
WHERE
date_begin <= "2010-12-31" AND date_end >= "2010-05-01"
GROUP BY
property_id
HAVING MIN(IF( (price_per_day BETWEEN 10 AND 100), 1, 0))=1
ORDER BY ...
LIMIT 10
SELECT p.id, MAX(p.name),
MIN(v.price_per_day) AS price_low,
MAX(v.price_per_day) AS price_high
FROM properties p
JOIN properties_prices v ON p.id = v.property_id
AND v.price_per_day BETWEEN 10 AND 100
AND v.date_begin < '2010-12-31' AND v.date_end > '2010-05-01'
GROUP BY p.id
ORDER BY ...
LIMIT 10;
CREATE INDEX prices_covering ON properties_prices
(property_id, price_per_day, date_begin, date_end);
+----+-------------+-------+-------+-----------------+-----------------+---------+-----------+------+--------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+-------+-----------------+-----------------+---------+-----------+------+--------------------------+
| 1 | SIMPLE | p | index | PRIMARY | PRIMARY | 4 | NULL | 1 | |
| 1 | SIMPLE | v | ref | prices_covering | prices_covering | 4 | test.p.id | 6 | Using where; Using index |
+----+-------------+-------+-------+-----------------+-----------------+---------+-----------+------+--------------------------+