【发布时间】:2017-12-12 15:42:43
【问题描述】:
我正在尝试通过数据库中的日期字段从 mysql 中选择数据。 (用户可以输入开始日期和结束日期)
对于用户选定日期之间的每个选定行,我需要从同一个表中进行选择以产生结果。
例子:
$query = "SELECT * FROM table WHERE date BETWEEN $begindate AND $enddate"; //Select by date
$result = mysqli_query($dbc,$query);
while($row = mysqli_fetch_array($result)){
vardump($row); //user needs to see all data between date selection
$query = "SELECT * FROM table WHERE field = $row['field']";
// and then do calculations with the data
}
这运行得很慢,我明白为什么。如何提高运行速度?
编辑: 最初的目的是在日期之间生成销售报告。现在用户希望报表产生另一个结果。此结果只能通过搜索同一个表来产生,并且我需要的行不在日期选择范围内。
编辑 2: 我确实需要在日期选择之间输出整个表格。每行都需要在日期选择的内部或外部找到 field = field 的所有其他行。
编辑 3:解决了问题。尽管我认为所选答案与我的问题最相关,但所有答案都很有帮助。但是,我相信在处理两个表时使用 join 是正确的方法。对于我的问题,我实际上只是通过复制表格并针对复制的表格运行搜索来解决它。选择的答案对我不起作用,因为第二个查询选择不是第一个查询选择的一部分。希望这会帮助任何看到这篇文章的人。再次感谢所有帮助!
【问题讨论】:
-
你的表有索引吗?
-
为什么要对表运行单个查询循环?
-
查看 SQL 中的 JOIN 语法,以便您可以运行 ONE 查询以在一次执行中获取所有数据。我假设您正在查看两个不同的表,对吗?
-
对表和字段使用有意义的名称。两个查询是同一张表吗?
-
Codemole 的答案应该可以完成您需要做的事情,而无需复制表格。尽管 Tony Chiboucas 建议的加入也应该有效并且是我的选择。进行自联接并从两个匹配行返回数据都不是问题。
标签: php mysql sql query-optimization