2013-12-20 102 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>'; 
    } 
?> 
,