Удалите дублирующиеся результаты, полученные из базы данных MySQL с помощью Stack Overflow

Я отделил две таблицы от данных, которые являются записью бронирования комнаты студентов.
Существует две таблицы: «Кандидат» хранит ID и никнейм ученика, а «rmBooking» хранит записи о бронировании (время, дата и т. Д.).

  -Table Applicant

user_id  |   name
---------------------
1     |   Benny
2     |   Chars
3     |   Harry
......   |   ......

-Table rmBooking

room   |  booking_date  |  from_time  |  to_time
----------------------------------------------------
101    |  22-09-2014    |     1       |     3
101    |  28-09-2014    |     2       |     4
101    |  02-10-2014    |     1       |     4
101    |  04-10-2014    |     3       |     6
......  |   ......       |   ......    |  ......

Я хотел бы показать результаты в виде одной таблицы в браузере, например:

    user_id  |   name    |    room   |  booking_date  |  from_time  |  to_time
-----------------------------------------------------------------------------
1     |   Benny   |    101    |  22-09-2014    |     1       |     3
2     |   Chars   |    101    |  28-09-2014    |     2       |     4
3     |   Harry   |    101    |  02-10-2014    |     1       |     4
......   |   ......  |  ......   |   ......       |   ......    |  ......

Когда я попытался выполнить эту работу и протестировать в браузере, таблица показала:

    user_id  |   name    |    room   |  booking_date  |  from_time  |  to_time
-----------------------------------------------------------------------------
1     |   Benny   |    101    |  22-09-2014    |     1       |     3
1     |   Benny   |    101    |  22-09-2014    |     1       |     3
1     |   Benny   |    101    |  22-09-2014    |     1       |     3
......   |   ......  |  ......   |   ......       |   ......    |  ......
2     |   Chars   |    101    |  22-09-2014    |     1       |     3
2     |   Chars   |    101    |  22-09-2014    |     1       |     3
......   |   ......  |  ......   |   ......       |   ......    |  ......
3     |   Harry   |    101    |  22-09-2014    |     1       |     3
3     |   Harry   |    101    |  22-09-2014    |     1       |     3
......   |   ......  |  ......   |   ......       |   ......    |  ......
1     |   Benny   |    101    |  28-09-2014    |     2       |     4
1     |   Benny   |    101    |  28-09-2014    |     2       |     4
......   |   ......  |  ......   |   ......       |   ......    |  ......
2     |   Chars   |    101    |  28-09-2014    |     2       |     4
2     |   Chars   |    101    |  28-09-2014    |     2       |     4
......   |   ......  |  ......   |   ......       |   ......    |  ......

..............................................................

1     |   Benny   |    101    |  02-10-2014    |     1       |     4
......   |   ......  |  ......   |   ......       |   ......    |  ......

И мой код PHP:

    <?php
$dbConnection = mysql_connect("localhost", "aaaaa", "bbbbb");
if (!$dbConnection) {
die("Could not connect database: " . mysql_error());
}
mysql_select_db("aaaaa");
$show_rmBooking = mysql_query("SELECT DISTINCT user_id, name, booking_date, from_time, to_time, room FROM rmBooking, Applicant
GROUP BY user_id
ORDER BY user_id, booking_date;
");

if(!$show_rmBooking){
die("Cannot select Database: rmBooking or Applicant, Error:" . mysql_error());
}

$rmTable = "<table border=1>";
$rmTable .= "<tr>";
$rmTable .= "<th colspan=6 align=center>Room's Enrollment report</th>";
$rmTable .= "</tr>";
$rmTable .= "<tr>";
$rmTable .= "<td style='text-align:center'>ID</td>";
$rmTable .= "<td style='text-align:center'>name</td>";
$rmTable .= "<td style='text-align:center'>Room Number</td>";
$rmTable .= "<td style='text-align:center'>Booking date</td>";
$rmTable .= "<td style='text-align:center'>From</td>";
$rmTable .= "<td style='text-align:center'>To</td>";
$rmTable .= "</tr>";
$rmTable .= "<tr>";
if(mysql_num_rows($show_rmBooking) > 0){
while ($rows_Applicant = mysql_fetch_array($show_rmBooking)){
foreach($rows_Applicant as $key => $value){
$rmTable .= "<tr>";
$rmTable .= "<td>" . $rows_Applicant['user_id'] . "</td>";
$rmTable .= "<td>" . $rows_Applicant['name'] . "</td>";
$rmTable .= "<td>" . $rows_Applicant['room'] . "</td>";
$rmTable .= "<td>" . $rows_Applicant['booking_date'] . "</td>";
$rmTable .= "<td>" . $rows_Applicant['from_time'] . "</td>";
$rmTable .= "<td>" . $rows_Applicant['to_time'] . "</td>";
$rmTable .= "</tr>";
}
}
}
$rmTable .= "</tr>";
$rmTable .= "</table>";

echo $rmTable;
mysql_free_result($show_rmBooking);
mysql_close($dbConnection);

?>
Это показывает неправильные результаты, и записи о бронировании дублируются со студентами. Должен ли я сначала присоединиться к таблицам на сервере MySQL или неправильное кодирование? Может кто-нибудь научить меня, как присоединиться к таблицам в MySQL, большое спасибо.

1

Решение

Если вы хотите отобразить таблицу так, как вы описали, вы должны использовать JOIN, Но я не вижу никакой связи между двумя таблицами. Рассмотрим две таблицы примеров:

Table Vendors
+ id + vendor_name + product_related +
|----|-------------|-----------------|
| 1  | Coke        | Coca Cola       |
| 2  | Pepsi       | Pepsi Diet      |
+----+-------------+-----------------+

Table Addicts
+ id + name + addicted_to +
|----|------|-------------|
| 1  | Mike | 1           |
| 2  | Sarah| 1           |
| 3  | Jake | 2           |
+----+------+-------------+

addicted_to столбец представляет идентификатор продукта из предыдущей таблицы. Итак, если мы присоединяемся к ним так: SELECT * FROM Addicts JOIN Vendors ON Addicts.addicted_to = Vendors.id мы получим необходимую таблицу:

+ id + name + addicted_to + id + vendor_name + product_related +
|----|------|-------------|----|-------------|-----------------|
| 1  | Mike | 1           | 1  | Coke        | Coca Cola       |
| 2  | Sarah| 1           | 1  | Coke        | Coca Cola       |
| 3  | Jake | 2           | 2  | Pepsi       | Pepsi Diet      |
+----+------+-------------+----+-------------+-----------------+

Осторожно, как столбец id будет неоднозначным и планировать свою базу данных и структуру таблицы, имея в виду отношения.

0

Другие решения

Таким образом, для двух таблиц: одна для кандидата и одна книга rmBooking, вам нужен внешний ключ в таблице rmBooking, который указывает на таблицу кандидата. Затем, когда вы выполните JOIN, связь будет легко определить, с этого момента все, что вам нужно, это JOIN, чтобы получить правильные данные:

-Заявитель стола

user_id  |   name

   1     |   Benny
2     |   Chars
3     |   Harry
......   |   ...…

-Стол rmBooking

room   |  booking_date  |  from_time  |  to_time  | user_id

101    |  22-09-2014    |     1       |     3     |    1
101    |  28-09-2014    |     2       |     4     |    2
101    |  02-10-2014    |     1       |     4     |    3

…… | …… | …… | … …

«user_id» в таблице rmBooking — это внешний ключ, который подключается обратно к таблице кандидата. Каждый пользователь в этом случае имеет бронирование

Следующий JOIN получит желаемый результат:

SELECT a.user_id, a.name, b.room, b.booking_date, b.from_time, b.to_time
FROM rmBooking b JOIN applicant a ON a.user_id = b.user_id

Обратите внимание на использование псевдонима для имен таблиц, это значительно упрощает чтение оператора и предотвращает неоднозначность именованных полей в базе данных; вы можете точно увидеть, где каждое значение приходит из какой таблицы.

Надеюсь, это поможет!

1

Так как вы не связали свой Applicant а также rmBooking вместе с условием mysql в основном покажет декартово произведение Applicant а также rmBooking,

Вероятно, вы хотели бы хранить Applicant информация в вашем rmBooking таблица как ниже:

 -Table rmBooking

room   |  booking_date  |  from_time  |  to_time  | user_id
---------------------------------------------------------------
101    |  22-09-2014    |     1       |     3     |    1
101    |  28-09-2014    |     2       |     4     |    2
101    |  02-10-2014    |     1       |     4     |    1
101    |  04-10-2014    |     3       |     6     |    3
......  |   ......       |   ......    |  ......   |  ......

а затем свяжите их вместе с условием соединения следующим образом:

SELECT
a.user_id, a.name, r.booking_date, r.from_time, r.to_time, r.room
FROM
Applicant a left join rmBooking r on a.user_id = r.user_id
ORDER BY
a.user_id, r.booking_date;

PS: я проверил ваш SQL и описание вашей таблицы, оказалось, что они не совпадают.
В вашем SQL есть BookingDate а также RmBooking_Applicant но ваши столы Applicant а также rmBooking, Поэтому я разработал на основе вашего описания таблицы.

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector