Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP将多个值堆叠成一个值_Php_Mysql - Fatal编程技术网

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