Как соединить две таблицы, когда одна таблица может иметь несколько данных для одного пользователя (несколько номеров телефонов, для одного пользователя), чтобы отображаться в одной строке - PullRequest
0 голосов
/ 20 апреля 2019

У меня есть одна таблица, которая содержит (user_id (первичный ключ), first_name, last_name, email, номер телефона), а другая содержит (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 голосов
/ 20 апреля 2019

Вы можете использовать group by с group_concat (), так что вы можете запросить для html и php код будет$ result = "SELECT first_name, last_name, email, phone_number, group_concat (phone_number2) в качестве phone_number2 ИЗ ЛИЧНОГО ВЛЕВОГО телефона ВКЛЮЧЕНО personal.user_id = phone.user_id группа по phone.user_id, first_name, last_name, email, phone_number"

если вы используете mariadb, тогда будет достаточно группировки только по phone.user_id.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...