基于2x mysql db查询生成html表

时间:2016-02-11 21:23:27

标签: php mysql

我正在尝试显示从两个表中查询的内容,但是在一个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 

查询完成,但第二个表字段全为空: phpmyadmin screenshot

此外,当我添加其他条款时,它会中断:

WHERE user_id = '{$_SESSION['user_id']}' ORDER BY date DESC LIMIT 30

3 个答案:

答案 0 :(得分:2)

我认为你是在FULL OUTER JOIN概念之后:

  

FULL OUTER JOIN关键字返回左表(table1)和右表(table2)中的所有行

enter image description here

您可以将共同日期用作共享行。

所以查询将变得简单:

$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概念的示意图:

enter image description here

答案 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>";

我有一种感觉,我可能误解了需要。如果是的话,我道歉。如果你能详细说明一点,我可以改变我的答案:)