我试图通过数据库中的日期字段从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是正确的方法。对于我的问题,我实际上只是通过复制表来解决它,并在复制的表上运行搜索。所选答案对我无效,因为第二个查询选择不是第一个查询选择的一部分。希望这能帮到看这篇文章的人。再次感谢你的帮助!
发布于 2017-12-12 15:59:41
那么,如果您真的要在相同的表中寻找这样的条件,我建议您应该使用IN选择器,如下所示:
$query = "SELECT * FROM table
WHERE field IN
(SELECT DISTINCT field FROM table
WHERE
date BETWEEN $begindate AND $enddate)";因此,最终代码如下所示:
$query = "SELECT * FROM table
WHERE field IN
(SELECT DISTINCT field FROM table
WHERE
date BETWEEN $begindate AND $enddate)";
$result = mysqli_query($dbc,$query);
while($row = mysqli_fetch_array($result)){
// do calculations with the $row
}发布于 2017-12-12 15:52:55
我想你的表名不是TABLE
只有用户inner join
$query = "SELECT *
FROM table1
JOIN table2
ON table1.field = table2.field
WHERE date BETWEEN $begindate AND $enddate
ORDER BY table1.field;"发布于 2017-12-12 16:01:06
停止编写伪SQL。
SELECT * FROM在技术上是伪sql (解释器在执行命令之前必须修改的一个sql命令)。最好养成语句的习惯。
使用SQL联接
连接使关系数据库变得非常有用和强大。学习他们。我爱他们。
将您的一组SQL查询组合成一个查询:
SELECT
table1.id as Aid, table1.name as Aname, table1.field as Afield,
table2.id as Bid, table2.name as Bname, table2.field
FROM table table1
LEFT JOIN table table2
ON table1.field = table2.field
WHERE table1.date BETWEEN $begindate AND $enddate
ORDER BY table1.id, table2.id由此产生的数据打印结果应该会导致访问每一组数据的结果,类似于:
$previous_table1_id = 0;
while($row = mysqli_fetch_array($result)){
if ($row['Aid'] != $previous_table1_id) {
echo 'Table1: ' . $row['Aid'] . ' - ' . $row['Aname'] . ' - '. $row['Afield'] . "\n";
$previous_table1_id = $row['Aid'];
}
echo 'Table2: ' . $row['Bid'] . ' - ' . $row['Bname'];
}处理聚合数据
数据聚合(表1/表2在field上的多个匹配)是一个复杂的主题,但要了解它很重要。现在,我把这个留给你:
下面是一个简单的示例,说明聚合数据是什么,以及使用它的无数方法之一。
Contents of Table
id | name | field
--------------------
1 | foos | whoag
2 | doh | whoag
3 | rah | whoag
4 | fun | wat
5 | ish | wat
Result of query I gave you
Aid | Aname | Afield | Bid | Bname
----------------------------------
1 | foos | whoag | 1 | foos
1 | foos | whoag | 2 | doh
1 | foos | whoag | 3 | rah
2 | doh | whoag | 1 | foos
2 | doh | whoag | 2 | doh
2 | doh | whoag | 3 | rah
3 | rah | whoag | 1 | foos
3 | rah | whoag | 2 | doh
3 | rah | whoag | 3 | rah
4 | fun | wat | 4 | fun
4 | fun | wat | 5 | ish
5 | ish | wat | 4 | fun
5 | ish | wat | 5 | ish按收缩结果集的示例分组
SELECT table1.id as Aid, table1.name as Aname
group_concat(table2.name) as field
FROM table table1
LEFT JOIN table table2
ON table1.field = table2.field
WHERE table1.date BETWEEN $begindate AND $enddate
ORDER BY table1.id, table2.id
GROUP BY Aid
Aid | Aname | field
----------------------------------
1 | foos | foos,doh,rah
2 | doh | foos,doh,rah
3 | rah | foos,doh,rah
4 | fun | fun, ish
5 | ish | fun, ishhttps://stackoverflow.com/questions/47776376
复制相似问题