PHP将多个值堆叠成一个值
这是我用于查询的预订表PHP将多个值堆叠成一个值,php,mysql,Php,Mysql,这是我用于查询的预订表 +----------------------+ | event_id | person_id | +----------------------+ | 5 | 7 | | 4 | 7 | | 3 | 7 | | 4 | 5 | | 3 | 5 | | 5 | 3 | +------------
+----------------------+
| event_id | person_id |
+----------------------+
| 5 | 7 |
| 4 | 7 |
| 3 | 7 |
| 4 | 5 |
| 3 | 5 |
| 5 | 3 |
+----------------------+
此表显示person_id 7有3个预订,5个有2个预订,3个有6个预订。
目前,我正在使用此查询获取每人的预订总数
$query='
SELECT
bookings.person_id,
COUNT(bookings.person_id) AS total,
bookings.event_id,
users.display_name
FROM bookings
INNER JOIN users ON bookings.person_id=users.id
WHERE users.id=bookings.person_id
GROUP BY bookings.person_id';
$result = mysql_query($query);
if($result) {
while($row = mysql_fetch_array($result))
{
/* total bookings per user */
$value = $row['total'];
$sum += $value;
/* events booked per user */
$events....
/* Displaying results */
echo "<tr width='500'>";
echo "<td>".$row['person_id']."</td>";
echo "<td>".$row['display_name']."</td>";
echo "<td>".$row['total']."</td>";
echo "<td>".$events."</td>";
echo "</tr>";
}
我正在寻求帮助以显示每个人预订的活动(如下面的第4列):
你能帮我到那里吗。
谢谢。
GROUP\u CONCAT
查询略有不同,但结果相同:
SELECT
bookings.person_id,
COUNT(
bookings.person_id
) AS total,
users.display_name,
GROUP_CONCAT(
bookings.event_id
ORDER BY
bookings.event_id
) AS events_list
FROM
bookings,
users
WHERE
bookings.person_id=users.id
GROUP BY
bookings.person_id
ORDER BY
bookings.person_id
我不知道对于大数据,执行时间是否更短、更长或相等。请。它们不再得到维护,而是在使用。相反,请了解并使用。当只有一行连接到3行时,您如何阅读“3有6个预订”?请添加一些说明(提及您使用的
GROUP\u CONCAT
),并可能添加到手册的链接,以便您的答案更具教育价值。太好了!谢谢娜达。它不适用于大数据。我将用更大的数据来测试它,以确定哪一个更轻。记住,ORDER_BY和ORDER_BY都是可选的
+------------------------------------------------+
| ID | NAME | Total Bookings | Event IDs |
+------------------------------------------------+
| 7 | Bob | 3 | 5,4,3 |
| 5 | Jane | 2 | 4,3 |
| 3 | Joe | 1 | 5 |
+------------------------------------------------+
$query='
SELECT
bookings.person_id,
COUNT(bookings.person_id) AS total,
GROUP_CONCAT(bookings.event_id) as event_ids,
users.display_name
FROM bookings
INNER JOIN users ON bookings.person_id=users.id
WHERE users.id=bookings.person_id
GROUP BY bookings.person_id';
SELECT
bookings.person_id,
COUNT(
bookings.person_id
) AS total,
users.display_name,
GROUP_CONCAT(
bookings.event_id
ORDER BY
bookings.event_id
) AS events_list
FROM
bookings,
users
WHERE
bookings.person_id=users.id
GROUP BY
bookings.person_id
ORDER BY
bookings.person_id