2013-12-20 101 views
0

今天我花了很長時間查看所有的SO,還沒有找到答案,我已經實現了,因爲我需要,因爲這是我第一次嘗試加入表格而不是創建低效的怪物,我想我會尋求幫助!php mysql查詢加入兩張表

我有兩個表:

  1. 的UserData(ID,姓,電子郵件)
  2. appointmentData(ID,UID,appointmentNum,appointmentDate)

在第二表中的UID與對應第一個表的ID。

我想要做的是顯示一個表格:

姓氏|電子郵件|約會1 |約會1日期|約會2 | appointment2日期等等

我想:

mysql_query("SELECT * FROM userData as table1 INNER JOIN appointmentData as table2 ON table1.id = table2.uid ORDER BY table1.surname ASC"); 

但這隻會顯示該特定用戶的第一次約會,如果我使用while循環(我想,我想顯示數據在水平表時,它的垂直陣列中,如果是有道理的):

while($row = mysql_fetch_array($result)) { 
echo"<td>".$row['surname']."</td>"; 
echo"<td>".$row['email']."</td>"; 
echo"<td>".$row['apptDate']."</td>"; 
... 
} 

我真的很感激,如果有人可以幫助我指出了正確的方向!

+0

如果一個用戶有1000000個約會,而另一個用戶只有1個約會,應該顯示什麼? –

+0

對不起,我應該指定,最多有三個約會,所以我希望如果沒有預約日期設置,我將需要顯示一個空白表單元格。 –

回答

3

你可以這樣開始:

$prevId = ''; 
while($row = mysql_fetch_array($result)) { 
    if ($row['id'] != $prevId) { 
     if ($prevId != '') echo '</tr>'; // close previous row 
     echo '<tr><td>' . htmlspecialchars($row['surname']) . '</td>'; 
     echo '<td>' . htmlspecialchars($row['email']) . '</td>'; 
     $prevId = $row['id']; 
    } 
    echo '<td>' . $row['apptDate'] . '</td>'; 
} 
if ($prevId != '') echo '</tr>'; // close last row 

這將顯示你所需要的表,但表格佈局不會是非常正確的(瀏覽器將正常顯示,但實際的html代碼會不對)

要解決這個問題 - 您需要統計顯示的列數,並在關閉前添加相應數量的空<td></td></tr>

+0

伊利亞,你是明星!我需要按照你所說的方式進行處理,並且在過去的10分鐘內幫助了我,而不是在過去5個小時內實現的。非常感謝你,我已經勾選了接受它的答案(讓我知道是否還有其他事情需要我去做)。 爲防萬一別人使用這個答案的方式,行: $ prevName = $ row ['surname'] 最後需要一個分號。 –

0

如果你想爲每個記錄行,你必須包括<tr>標籤是這樣的:

while($row = mysql_fetch_array($result)) 
{ 
echo "<tr>"; 
echo"<td>".$row['surname']."</td>"; 
echo"<td>".$row['email']."</td>"; 
echo"<td>".$row['apptDate']."</td>"; 
... 
echo "</tr>"; 
} 
+0

爲了簡潔,我減少了代碼 - 缺少

,, etc ...標籤不是不幸的問題 - 這是我從數據中提取的方式。我不想顯示整個頁面,因爲它對問題沒有任何價值。 –

0
$result = mysql_query("SELECT * FROM userData ORDER BY table1.surname ASC"); 
while($row = mysql_fetch_assoc($result)){ 
    $result2 = mysql_query("SELECT * FROM appointmentData WHERE uid = {$row['id']} LIMIT 3"); 
    $appointment1 = mysql_fetch_assoc($result2); 
    $appointment2 = mysql_fetch_assoc($result2); 
    $appointment3 = mysql_fetch_assoc($result2); 
    echo "<td>" . (($appointment1==false)?"":$appointment1['appointmentDate']) . "</td>"; 
} 

我正在寫這個在我的手機上,但也許你有我的想法。

1
<?php 

    $query="SELECT * FROM userData as table1 INNER JOIN appointmentData as table2 ON table1.id = table2.uid ORDER BY table1.surname ASC"; 
$result=mysql_query($query); 
echo "table"; 
while($row=mysql_fetch_array($result)) 
    { 
    echo '<tr><td>' . htmlspecialchars($row['surname']) . '</td>'; 
    echo '<td>' . htmlspecialchars($row['email']) . '</td>'; 
    echo '<td>' . htmlspecialchars($row['appointment1 ']) . '</td>'; 
    echo '<td>' . htmlspecialchars($row['date ']) . '</td>'; 
    echo '</tr>'; 
    } 
?> 
,