2016-02-11 53 views
2

我試圖顯示從兩個表查詢的東西,但在一個HTML表。過去30天顯示數據,根據該數據生成html表格。 目前我堅持使用兩個查詢和生成兩個HTML表格:基於2個MySQL數據庫查詢生成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 
+0

是的,它可以顯示在一張表中。請參閱td元素的colspan屬性。 – Shadow

+0

我不明白這與我的問題有什麼關係。基本上我有第一個數據庫的5列和第二個數據庫的另外3列。我不能在格式化中斷的同一張表上生成它們,因爲兩個數據庫中的日期不一定在它們中都有。 – Ivan

+0

@Ivan - 你是否還想合併行?或者這兩個結果集是否完全獨立於彼此之外,而不是他們將共享一張表? –

回答

2

我認爲你是後FULL OUTER JOIN概念:

的FULL OUTER JOIN關鍵字返回左表中的所有行(表1),從右表(表2)

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

+0

Mysql不支持完全外部聯接。你需要使用union來實現相同的功能。 – Shadow

+0

@Shadow tnx值得注目的老兄! – Trix

+0

一直在嘗試這樣做,但沒有運氣:「字段列表中的列'日期'不明確」 – Ivan

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結果。然後,在將所有數據添加到它之後,您會將其回顯出來。

至於你的第二點,如果字段不存在就沒有什麼大不了的。如果它們爲null,那麼只會有一個沒有數據的列。

這裏的假冒列名的例子:

$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>"; 

我有一種感覺,我可能誤解的需要。如果是這樣,我表示歉意。如果你能否詳細說明只是多一點我可以改變我的答案:)

1

運行到相當多的顛簸後,有了這個,我最終設法合併了每個表中的2列,並且使用了where和where子句用下面的查詢米:

(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) 

簡化,「user_visit_logs」和「surfer_stats」們需要被接合的2個表。