当一个表可以有一个用户拥有多个数据(一个用户有多个电话号码)时,如何连接两个表

时间:2019-04-20 18:13:30

标签: php jquery mysqli

我有一个表包含(user_id(主键),first_name,last_name,电子邮件,电话号码),另一个表包含(phone_id(主键),phone_number2和外键user_id)。

一个用户可以拥有多个电话号码。

因此使用查询:

$result = "SELECT * FROM personal LEFT JOIN phone ON personal.user_id = phone.user_id"; 

我可以在表格中显示数据。

我的问题是,如果一个人有多个电话号码,那么每个其他电话号码都会在新行中显示。

如何将所有其他电话号码合并为一行。请注意,电话号码是使用jQuery动态输入的,因此一个用户可能拥有另一个电话号码。

此后,我需要能够编辑该数据。

用于输入表单数据的php代码

// Makes connection to the database
$mysqli = @mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME) or die($mysqli->error);

// Checks if the submit button has been pressed, setst the variable values of the name values from the form
if (isset($_POST['submit'])){
  $first_name = $_POST['first_name'];
  $last_name = $_POST['last_name'];
  $email = $_POST['email'];
  $phone_number = $_POST['phone_number'];
// Inserts the form input into the personal table in the exercise database
$mysqli->query("INSERT INTO personal (first_name, last_name, email, phone_number) VALUES('$first_name', '$last_name', '$email', '$phone_number')")
      OR die($mysqli->error);
  $user_id = $mysqli->insert_id;
// Checks if the Add more numbers button has been pressed
 if (isset($_POST['phone_number2'])) {
   $phone_number2 = $_POST['phone_number2'];
// foreach statement to loop trought the array of inserted additional phone numbers
  foreach ($phone_number2 as $key => $value) {
      $mysqli->query("INSERT INTO phone (user_id, phone_number2) VALUES('$user_id','$value')")
               OR die($mysqli->error);
}
}
}

显示条目数据的html和php代码:

<?php
  require_once 'process.php';

    $result = "SELECT * FROM personal LEFT JOIN phone ON personal.user_id = phone.user_id";
  $result = mysqli_query($mysqli, $result);

  if (mysqli_num_rows($result) > 0) {
    while ($row = mysqli_fetch_array($result)) {
?>
<div class="container">
<table class="table">
<tr class="thead-dark">
  <th>First name</th>
  <th>Last name</th>
  <th>Email</th>
  <th>Phone number</th>
  <th>Additional phone numbers</th>
  <th colspan=""></td>
</tr>
<tr>
  <td><?php echo $row["first_name"];?></td>
  <td><?php echo $row["last_name"];?></td>
  <td><?php echo $row["email"];?></td>
  <td><?php echo $row["phone_number"];?></td>
  <td><?php echo $row["phone_number2"];?></td>
</tr>
</table>
</div>
<?php
    }
  };
 ?>

1 个答案:

答案 0 :(得分:0)

您可以通过group_concat()使用group by,因此您可以查询html和php代码

$ result =“从个人左加入电话中,选择“ first_name,last_name,电子邮件,phone_number,group_concat(phone_number2)作为phone_number2” personal.user_id = phone.user_id按phone.user_id,first_name,last_name,电子邮件,phone_number分组”

如果您使用mariadb,则按电话分组。仅user_id就足够了。