php - 另一个 table 里面的 table

标签 php mysql select

我想公开计划我的旅行,以便其他人可以加入我。所以,我建立了一个 PHP 网站。

我有这个表:

trips:
+----+---------+------------+------------+-------------------------+
| id | title   | date_start | date_end   | marker_adress           |
+----+---------+------------+------------+-------------------------+
|  1 | Berlin  | 2015-07-10 | 2015-07-11 | Potsdamer Platz, Berlin |
|  2 | Hamburg | 2015-07-16 | 2015-07-18 | Jungfernstieg, Hamburg  |
+----+---------+------------+------------+-------------------------+

fellows:
+----+---------+---------------+
| id | trip_id | twittername   |
+----+---------+---------------+
|  1 |       1 | prtyengopls   |
|  2 |       1 | itobi_yt      |
|  3 |       1 | jessisadancer |
|  4 |       2 | jessisadancer |
|  5 |       2 | woelfch3n     |
+----+---------+---------------+

为了显示,我想在一个查询中查询它们。 我如何查询数据库才能得到这样的东西?(我知道,它是 JSON,但它很好地显示了结构。)

{
    "id": 1,
    "date_start": "2015-07-10",
    "date_end": "2015-07-11",
    "marker_adress": "Potsdamer Platz, Berlin",
    "fellows": [
        {
            "id": 1,
            "twittername": "prtyengopls"
        },
        {
            "id": 2,
            "twittername": "itobi_yt"
        },
        {
            "id": 3,
            "twittername": "jessisadancer"
        }
    ]
}

最佳答案

首先,您必须使用LEFT JOIN,如下所示:

SELECT 
  t.id AS tripID, 
  t.title AS title, 
  t.date_start AS dateStart, 
  t.date_end AS dateEnd, 
  t.marker_address AS markerAddress,
  GROUP_CONCAT(DISTINCT CAST(f.id AS CHAR)) AS fellowID,
  GROUP_CONCAT(DISTINCT CAST(f.twittername AS CHAR)) AS twitterName
FROM trips t LEFT JOIN fellows f ON t.id = f.trip_id
GROUP BY t.id

通过使用此功能,您将为每次行程获取一行,并且您可以为每行循环 fellowIDtwitterName,因为它将是 逗号 分隔列表如下:

fellowID: 1,2,3
twitterName: prtyengopls,itobi_yt,jessisadancer

Edit 1: I got a new column to trips called checked which is a boolean. Could you update your query, so only trips that have this boolean toggled on are displayed?

SELECT 
  t.id AS tripID, 
  t.title AS title, 
  t.date_start AS dateStart, 
  t.date_end AS dateEnd, 
  t.marker_address AS markerAddress,
  GROUP_CONCAT(DISTINCT CAST(f.id AS CHAR)) AS fellowID,
  GROUP_CONCAT(DISTINCT CAST(f.twittername AS CHAR)) AS twitterName
FROM trips t INNER JOIN fellows f 
  ON t.id = f.trip_id AND t.checked = 1
GROUP BY t.id

关于php - 另一个 table 里面的 table ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29059090/

相关文章:

php从数据库表填充选项框

MySQL - 显示给定财政年度的每月所有金额

mysql - 如何在 SQL 查询中生成 IF

PHP/MySQL - 从表中的一个条目获取多个字段

sql - 连接地理范围内的表

javascript - PHP - file_get_contents 使用正则表达式获取 JSON,但无法解码 JSON(获取 JSON_ERROR_SYNTAX)

php - 为动态搜索引擎php添加过滤器

php - 来自 PHP 导入脚本的未初始化字符串偏移错误

mysql - 从单个表中的不同行选择不同的值

MySQL 查询 : one table, 二级 SELECT。有没有更好的办法?