Я отделил две таблицы от данных, которые являются записью бронирования комнаты студентов.
Существует две таблицы: «Кандидат» хранит 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, большое спасибо.
Если вы хотите отобразить таблицу так, как вы описали, вы должны использовать 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
будет неоднозначным и планировать свою базу данных и структуру таблицы, имея в виду отношения.
Таким образом, для двух таблиц: одна для кандидата и одна книга 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
Обратите внимание на использование псевдонима для имен таблиц, это значительно упрощает чтение оператора и предотвращает неоднозначность именованных полей в базе данных; вы можете точно увидеть, где каждое значение приходит из какой таблицы.
Надеюсь, это поможет!
Так как вы не связали свой 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
, Поэтому я разработал на основе вашего описания таблицы.