PHP将多个值堆叠为一个值

时间:2015-04-21 13:23:51

标签: php mysql

这是我用于查询的预订表格

+----------------------+
| 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>";
}

这没关系,并且给了我:

 +-----------------------------------+
 | ID    |  NAME   | Total Bookings  |
 +-----------------------------------+
 | 7     |  Bob    | 3               |
 | 5     |  Jane   | 2               |
 | 3     |  Joe    | 1               |
 +-----------------------------------+

我正在寻求帮助以显示每个人预订的事件(如下面的第4列):

+------------------------------------------------+
| ID    |  NAME   | Total Bookings | Event IDs   |
+------------------------------------------------+
| 7     |  Bob    | 3              | 5,4,3       |
| 5     |  Jane   | 2              | 4,3         |
| 3     |  Joe    | 1              | 5           |
+------------------------------------------------+
你能帮助我到那里吗? 感谢。

2 个答案:

答案 0 :(得分:2)

GROUP_CONCAT https://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_group-concat

$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';

答案 1 :(得分:0)

有点不同的查询,但结果相同:

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

我不知道对于大数据,执行时间是否更少,更多或更多。