我正在尝试显示从两个表中查询的内容,但是在一个html表上。显示最近30天的数据,基于该数据生成html表。 目前,我不得不使用两个查询并生成两个html表:
$query1 = mysqli_query( $con, "SELECT date, stuff* " );
while( $record = mysqli_fetch_array( $query1 ) ){
echo '<html table generated based on query>';
}
$query2 = mysqli_query( $con, "SELECT date, other stuff*" );
while( $record = mysqli_fetch_array( $query2 ) ){
echo '<another html table generated based on query2>';
}
是否有可能在一个html表上显示两个查询?
请注意,它很棘手,因为我们在一个表上有日期,这些日期不一定在第二个表中找到,反之亦然。
感谢支持人员。到目前为止,我一直坚持这个:
SELECT * FROM user_visit_logs
LEFT JOIN surfer_stats ON user_visit_logs.date = surfer_stats.date
UNION
SELECT * FROM user_visit_logs
RIGHT JOIN surfer_stats ON user_visit_logs.date = surfer_stats.date
此外,当我添加其他条款时,它会中断:
WHERE user_id = '{$_SESSION['user_id']}' ORDER BY date DESC LIMIT 30
答案 0 :(得分:2)
我认为你是在FULL OUTER JOIN
概念之后:
FULL OUTER JOIN关键字返回左表(table1)和右表(table2)中的所有行
您可以将共同日期用作共享行。
所以查询将变得简单:
$query = "
SELECT table1.date, stuff
FROM table1
LEFT OUTER JOIN table2 ON table1.date = table2.date
UNION
SELECT table2.date, other_stuff
FROM table1
RIGHT OUTER JOIN table2
ON table1.date = table2.date
";
$result = mysqli_query( $con, $query );
while( $record = mysqli_fetch_array( $result ) ){
echo '<html table generated based on query>';
}
这是FULL OUTER JOIN
概念的示意图:
答案 1 :(得分:1)
在遇到这个问题后,我终于设法合并了每个表中的2列,并使用以下查询在where和sort子句中使用:
( SELECT user_visit_logs.user_id,user_visit_logs.date,unique_hits,non_unique_hits,earned,sites_surfed,earnings FROM user_visit_logs
LEFT OUTER JOIN surfer_stats ON user_visit_logs.user_id = surfer_stats.user_id AND user_visit_logs.date = surfer_stats.date where user_visit_logs.user_id = 23 ORDER BY date DESC LIMIT 30 )
UNION
( SELECT surfer_stats.user_id,surfer_stats.date,unique_hits,non_unique_hits,earned,sites_surfed,earnings FROM user_visit_logs
RIGHT OUTER JOIN surfer_stats ON user_visit_logs.user_id = surfer_stats.user_id AND user_visit_logs.date = surfer_stats.date where user_visit_logs.user_id = 23 LIMIT 30 )
简化,&#34; user_visit_logs&#34;和&#34; surfer_stats&#34;是否需要加入2个表。
答案 2 :(得分:0)
绝对。只需将它们都弹出一个变量:
$data = '';
$query = mysqli_query($con,"SELECT date, stuff* ");
while($record = mysqli_fetch_array($query)) {
$data.= '<tr><td>--Your Row Data Here--</td></tr>';
}
$query2 = mysqli_query($con,"SELECT date, other stuff*");
while($record = mysqli_fetch_array($query2)) {
$data .= '<tr><td>--Your Row Data Here--</td></tr>';
}
echo "<table>$data</table>";
您只需将结果存储在echo
中,而不是在循环中使用$data
。然后,在所有数据添加到它之后,你就会回复它。
关于你的第二点,如果字段不存在则不是什么大问题。如果它们为空,那么您将只有一个没有数据的列。
以下是假列名称的示例:
$data = '';
$query = mysqli_query($con,"SELECT date, stuff* ");
while($record = mysqli_fetch_array($query)) {
$data.= "<tr><td>{$record[id]}</td><td>{$record[first_name]}</td><td>{$record[last_name]}</td></tr>";
}
$query2 = mysqli_query($con,"SELECT date, other stuff*");
while($record = mysqli_fetch_array($query2)) {
$data .= "<tr><td>{$record[id]}</td><td>{$record[first_name]}</td><td>{$record[last_name]}</td></tr>";
}
echo "<table><tr><th>ID</th><th>First Name</th><th>Last Name</th></tr>$data</table>";
我有一种感觉,我可能误解了需要。如果是的话,我道歉。如果你能详细说明一点,我可以改变我的答案:)