用PHP填充表
我的数据库中有这样一个表:用PHP填充表,php,html,mysql,sql,mysqli,Php,Html,Mysql,Sql,Mysqli,我的数据库中有这样一个表: IdUser | Name | Surname | name | Surname| numbers | _____|________|__________| John | Doe | 21212121 | | | 23424324 | _____|________|__________| Frank|Johnson | 23222111 | | | 23747347 | | | 363
IdUser | Name | Surname |
name | Surname| numbers |
_____|________|__________|
John | Doe | 21212121 |
| | 23424324 |
_____|________|__________|
Frank|Johnson | 23222111 |
| | 23747347 |
| | 36363636 |
_____|________|__________|
foreach($result as $row)
echo '<tr><td>'.$row['name'].'</td><td>'.$row['surname'].'</td><td>'.implode(', ', $row['phonenumber'].'</td></tr>';
还有一张桌子,结构如下
IdPN | IdUser | PhoneNumber
此表的主键为IdPN
,因此每个用户可以有多个电话号码
现在,我从第一个表中获取数据,用于在HTML页面中生成一个表。我想要这样的东西:
IdUser | Name | Surname |
name | Surname| numbers |
_____|________|__________|
John | Doe | 21212121 |
| | 23424324 |
_____|________|__________|
Frank|Johnson | 23222111 |
| | 23747347 |
| | 36363636 |
_____|________|__________|
foreach($result as $row)
echo '<tr><td>'.$row['name'].'</td><td>'.$row['surname'].'</td><td>'.implode(', ', $row['phonenumber'].'</td></tr>';
所以第三个柱可以有多个数字
当每个用户只有一个数字时,我使用的php代码如下:
<?php
$connectiondb->set_charset("utf8");
$query= "SELECT name, surname, phonenumber
FROM users";
if ($stmt = $connectiondb->prepare($query)) {
$stmt->execute();
$stmt-bind_result($nome,$cognome,$phonenumber);
while($stmt->fetch()){
echo '<tr>';
echo '<td>'.$nome.'</td>';
echo '<td>'.$cognome.'</td>';
echo '<td>'.$phonenumber.'</td>';
echo '</tr>';
}
$stmt->close();
?>
如何更改代码以显示表中每一行的多个号码(用户)?$sql=“从PhoneNumber中选择PhoneNumber,其中IdUser=$user\u id”;
$result=mysql\u查询($sql);
while($row=mysql\u fetch\u assoc($result)){
echo$row['PhoneNumber']。“
\n”;
}
该代码块可用于显示由换行符分隔的$user\u id
的电话号码列表。只要定义了$user\u id
,放置在电话号码区域的
标记内即可完成此操作。$sql=“从电话号码中选择电话号码,其中IdUser=$user\u id”;
$result=mysql\u查询($sql);
while($row=mysql\u fetch\u assoc($result)){
echo$row['PhoneNumber']。“
\n”;
}
该代码块可用于显示由换行符分隔的
$user\u id
的电话号码列表。只要定义了$user\u id
,放置在电话号码区域的
标记内就可以了。将SQL更改为包含IdUser
列,如下所示:
选择users.IdUser,users.Name,users.姓氏,phones.PhoneNumber
来自用户
左键连接电话打开(users.IdUser=phones.IdUser);
然后,您可以使用PHP将手机排序为结构化数组,并从中开始:
$aUsers=array();
$aUserPhones=array();
while($row=mysql\u fetch\u assoc($result)){
如果(!isset($aUsers)){
$aUsers['UserId']=数组(
'nom'=>$nom,
“cognom”=>$cognom,
“电话”=>阵列($phone),
);
}
否则{
$aUsers[$userId]['phones'][]=$phone;
}
}
foreach($aUsers作为$aUser){
回声';
回显'.$aUser['nome'].'
回声'.$aUser['cognome'].';
回声';
回声内爆(“
”,$aUser['phones']);
回声';
回声';
}
将SQL更改为包含IdUser
列,如下所示:
选择users.IdUser,users.Name,users.姓氏,phones.PhoneNumber
来自用户
左键连接电话打开(users.IdUser=phones.IdUser);
然后,您可以使用PHP将手机排序为结构化数组,并从中开始:
$aUsers=array();
$aUserPhones=array();
while($row=mysql\u fetch\u assoc($result)){
如果(!isset($aUsers)){
$aUsers['UserId']=数组(
'nom'=>$nom,
“cognom”=>$cognom,
“电话”=>阵列($phone),
);
}
否则{
$aUsers[$userId]['phones'][]=$phone;
}
}
foreach($aUsers作为$aUser){
回声';
回显'.$aUser['nome'].'
回声'.$aUser['cognome'].';
回声';
回声内爆(“
”,$aUser['phones']);
回声';
回声';
}
像执行查询一样执行查询
SELECT A.name, A.surname,GROUP_CONCAT(phonenumbers) as phone_number
FROM TABLE1 A
JOIN TABLE2 B ON A.iduser = B.iduser
GROUP BY A.iduser
从这个查询中,您将得到以逗号分隔的电话号码
示例:(1123132123133)
使用“爆炸”进行拆分
$get_number = explode(" ", $number);
现在您将获得数组中的数字$get\u number
。按获取数字的计数
$row_span = count($get_number);
现在您将获得行跨度。使用foreach可以打印表中的数字。
所以你的td会像
<td rowspan="<?php echo $row_span; ?">
执行类似的查询
SELECT A.name, A.surname,GROUP_CONCAT(phonenumbers) as phone_number
FROM TABLE1 A
JOIN TABLE2 B ON A.iduser = B.iduser
GROUP BY A.iduser
从这个查询中,您将得到以逗号分隔的电话号码
示例:(1123132123133)
使用“爆炸”进行拆分
$get_number = explode(" ", $number);
现在您将获得数组中的数字$get\u number
。按获取数字的计数
$row_span = count($get_number);
现在您将获得行跨度。使用foreach可以打印表中的数字。
所以你的td会像
<td rowspan="<?php echo $row_span; ?">
我建议使用ID
而不是名称
您的数据将以如下方式返回:
name | Surname| numbers |
_____|________|__________|
John | Doe | 21212121 |
John | Doe | 23424324 |
John | Doe | ######## |
--------------------------
编辑:重新阅读问题,注意到您的表格结构
查询将变成:
SELECT name, surname, phonenumber, phone_ct
FROM users as u
join phone_numbers as ph
on ph.IdUser = u.IdUser
join phone_numbers as ph
on ph.IdUser = u.IdUser
join (select IdUser,
count(IdPN) as phone_ct
from phone_numbers
group by IdUser ) as ph_count
on ph_count.IdUser = u.IdUser
<?php
$connectiondb->set_charset("utf8");
$query = "
SELECT name, surname, phonenumber, phone_ct
FROM users as u
join phone_numbers as ph
on ph.IdUser = u.IdUser
join phone_numbers as ph
on ph.IdUser = u.IdUser
join (select IdUser,
count(IdPN) as phone_ct
from phone_numbers
group by IdUser ) as ph_count
on ph_count.IdUser = u.IdUser ";
if ($stmt = $connectiondb->prepare($query))
{
$stmt->execute();
$stmt->bind_result($nome, $cognome, $phonenumber, $phone_ct);
$row_ct = 0;
while($stmt->fetch())
{
$row_ct++
// do every row for every section
echo '<tr>';
// first row of this section
if ($row_ct==1)
{
echo "<td rowspan=$phone_ct>".$nome.'</td>';
echo "<td rowspan=$phone_ct>".$cognome.'</td>';
}
// do every row for every section
echo '<td>'.$phonenumber.'</td>';
echo '</tr>';
// end of this section
if ($row_ct==$phone_ct) {
$row_ct = 0;
}
}
$stmt->close();
} // end if $stmt
现在数据将变成:
name | Surname| numbers | phone_ct
_____|________|__________|___________
John | Doe | 21212121 | 3 |
John | Doe | 23424324 | 3 |
John | Doe | ######## | 3 |
-------------------------------------
编辑:更新代码,使其可能实际工作(lol…对不起)
代码将变成:
SELECT name, surname, phonenumber, phone_ct
FROM users as u
join phone_numbers as ph
on ph.IdUser = u.IdUser
join phone_numbers as ph
on ph.IdUser = u.IdUser
join (select IdUser,
count(IdPN) as phone_ct
from phone_numbers
group by IdUser ) as ph_count
on ph_count.IdUser = u.IdUser
<?php
$connectiondb->set_charset("utf8");
$query = "
SELECT name, surname, phonenumber, phone_ct
FROM users as u
join phone_numbers as ph
on ph.IdUser = u.IdUser
join phone_numbers as ph
on ph.IdUser = u.IdUser
join (select IdUser,
count(IdPN) as phone_ct
from phone_numbers
group by IdUser ) as ph_count
on ph_count.IdUser = u.IdUser ";
if ($stmt = $connectiondb->prepare($query))
{
$stmt->execute();
$stmt->bind_result($nome, $cognome, $phonenumber, $phone_ct);
$row_ct = 0;
while($stmt->fetch())
{
$row_ct++
// do every row for every section
echo '<tr>';
// first row of this section
if ($row_ct==1)
{
echo "<td rowspan=$phone_ct>".$nome.'</td>';
echo "<td rowspan=$phone_ct>".$cognome.'</td>';
}
// do every row for every section
echo '<td>'.$phonenumber.'</td>';
echo '</tr>';
// end of this section
if ($row_ct==$phone_ct) {
$row_ct = 0;
}
}
$stmt->close();
} // end if $stmt
我建议使用ID
而不是名称
您的数据将以如下方式返回:
name | Surname| numbers |
_____|________|__________|
John | Doe | 21212121 |
John | Doe | 23424324 |
John | Doe | ######## |
--------------------------
编辑:重新阅读问题,注意到您的表格结构
查询将变成:
SELECT name, surname, phonenumber, phone_ct
FROM users as u
join phone_numbers as ph
on ph.IdUser = u.IdUser
join phone_numbers as ph
on ph.IdUser = u.IdUser
join (select IdUser,
count(IdPN) as phone_ct
from phone_numbers
group by IdUser ) as ph_count
on ph_count.IdUser = u.IdUser
<?php
$connectiondb->set_charset("utf8");
$query = "
SELECT name, surname, phonenumber, phone_ct
FROM users as u
join phone_numbers as ph
on ph.IdUser = u.IdUser
join phone_numbers as ph
on ph.IdUser = u.IdUser
join (select IdUser,
count(IdPN) as phone_ct
from phone_numbers
group by IdUser ) as ph_count
on ph_count.IdUser = u.IdUser ";
if ($stmt = $connectiondb->prepare($query))
{
$stmt->execute();
$stmt->bind_result($nome, $cognome, $phonenumber, $phone_ct);
$row_ct = 0;
while($stmt->fetch())
{
$row_ct++
// do every row for every section
echo '<tr>';
// first row of this section
if ($row_ct==1)
{
echo "<td rowspan=$phone_ct>".$nome.'</td>';
echo "<td rowspan=$phone_ct>".$cognome.'</td>';
}
// do every row for every section
echo '<td>'.$phonenumber.'</td>';
echo '</tr>';
// end of this section
if ($row_ct==$phone_ct) {
$row_ct = 0;
}
}
$stmt->close();
} // end if $stmt
现在数据将变成:
name | Surname| numbers | phone_ct
_____|________|__________|___________
John | Doe | 21212121 | 3 |
John | Doe | 23424324 | 3 |
John | Doe | ######## | 3 |
-------------------------------------
编辑:更新代码,使其可能实际工作(lol…对不起)
代码将变成:
SELECT name, surname, phonenumber, phone_ct
FROM users as u
join phone_numbers as ph
on ph.IdUser = u.IdUser
join phone_numbers as ph
on ph.IdUser = u.IdUser
join (select IdUser,
count(IdPN) as phone_ct
from phone_numbers
group by IdUser ) as ph_count
on ph_count.IdUser = u.IdUser
<?php
$connectiondb->set_charset("utf8");
$query = "
SELECT name, surname, phonenumber, phone_ct
FROM users as u
join phone_numbers as ph
on ph.IdUser = u.IdUser
join phone_numbers as ph
on ph.IdUser = u.IdUser
join (select IdUser,
count(IdPN) as phone_ct
from phone_numbers
group by IdUser ) as ph_count
on ph_count.IdUser = u.IdUser ";
if ($stmt = $connectiondb->prepare($query))
{
$stmt->execute();
$stmt->bind_result($nome, $cognome, $phonenumber, $phone_ct);
$row_ct = 0;
while($stmt->fetch())
{
$row_ct++
// do every row for every section
echo '<tr>';
// first row of this section
if ($row_ct==1)
{
echo "<td rowspan=$phone_ct>".$nome.'</td>';
echo "<td rowspan=$phone_ct>".$cognome.'</td>';
}
// do every row for every section
echo '<td>'.$phonenumber.'</td>';
echo '</tr>';
// end of this section
if ($row_ct==$phone_ct) {
$row_ct = 0;
}
}
$stmt->close();
} // end if $stmt
如果您有两个表
IdUser | Name | Surname
IdPN | IdUser | PhoneNumber
我将使用第一个表作为“主”表,第二个表作为辅助表。IdUser将成为主表中的PK,但次表中的IdUser将成为主表中IdUser的外键(因为这两条信息是相同的,如果主表中没有相应的条目,您确实不应该向电话号码表添加对象。)您应该能够对两个表执行查询,以显示所需的信息(例如,可能是完全联接)。例如,
select a.IdUser, a.Name, b.Surname, b.IdPN, b.PhoneNumber from <primary table> as a, <secondary table> as b where a.IdUser=b.IdUser;
选择a.IdUser、a.姓名、b.姓氏、b.IdPN、b.电话号码,其中a.IdUser=b.IdUser;
这是一个示例,所以不要复制并粘贴它,但关键是如果两个表之间的关系是一致的,那么您应该能够执行单个查询来获取所需的所有内容。如果您有两个表
IdUser | Name | Surname
IdPN | IdUser | PhoneNumber
我将使用第一个表作为“主”表,第二个表作为辅助表。IdUser将成为主表中的PK,但辅助表中的IdUser将成为主表中IdUser的外键(因为这两条信息是相同的)