Mysql 通过非唯一id将数据连接在一起

Mysql 通过非唯一id将数据连接在一起,mysql,pivot,one-to-many,Mysql,Pivot,One To Many,假设我有两张表,如下所示: mysql> show columns from ping; +------------+------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +------------+------------------+------+-----+--------

假设我有两张表,如下所示:

mysql> show columns from ping;
+------------+------------------+------+-----+---------+----------------+
| Field      | Type             | Null | Key | Default | Extra          |
+------------+------------------+------+-----+---------+----------------+
| ping_id    | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| msg_size   | int(10) unsigned | YES  |     | NULL    |                |
| version    | int(10) unsigned | YES  |     | NULL    |                |
| num_points | int(10) unsigned | YES  |     | NULL    |                |
| lat_deg    | float            | YES  |     | NULL    |                |
| lat_min    | float            | YES  |     | NULL    |                |
| long_deg   | float            | YES  |     | NULL    |                |
| long_min   | float            | YES  |     | NULL    |                |
| bearing    | float            | YES  |     | NULL    |                |
| pitch      | float            | YES  |     | NULL    |                |
| roll       | float            | YES  |     | NULL    |                |
| heave      | float            | YES  |     | NULL    |                |
| tide       | float            | YES  |     | NULL    |                |
| hour       | int(10) unsigned | YES  |     | NULL    |                |
| min        | int(10) unsigned | YES  |     | NULL    |                |
| sec        | int(10) unsigned | YES  |     | NULL    |                |
| day        | int(10) unsigned | YES  |     | NULL    |                |
| month      | int(10) unsigned | YES  |     | NULL    |                |
| year       | int(10) unsigned | YES  |     | NULL    |                |
| posx       | float            | YES  |     | NULL    |                |
| posy       | float            | YES  |     | NULL    |                |
| pingtime   | int(10) unsigned | YES  |     | NULL    |                |
+------------+------------------+------+-----+---------+----------------+
22 rows in set (0.02 sec)
以及:

表Ping的Ping\u id是唯一的。但是,点的ping_id不是。即每个ping_id有几个点。我需要选择数据,以便每个ping有几个x,y列(点数不是常数)。即,我正在寻找如下输出:

+----------+------------------+-----------+-----+-----+----+------+----+----+-----+----+
| ping_id  | lat_deg          | lon_deg    | x1 | y1  | x2 | y2   | x3 | y3 | x4 | y4 | 
+----------+------------------+------------+-----+-----+----+-----+----+----+----+-----+

选择*FROM point JOIN ping on point.ping\u id=point.ping\u id WHERE point.ping\u id=?

选择*FROM point JOIN ping on point.ping\u id=point.ping\u id WHERE point.ping\u id=?

您应该连接表:

SELECT pg.ping_id, lat_deg, long_deg, p.x, p.y 
FROM ping pg 
JOIN point p ON p.ping_id = pg.ping_id
并处理结果以获得分组点,例如在PHP中:

$pings = array();
foreach($results as $row){
  $pings[$row['ping_id']][] = $row;
}

您应该联接表:

SELECT pg.ping_id, lat_deg, long_deg, p.x, p.y 
FROM ping pg 
JOIN point p ON p.ping_id = pg.ping_id
并处理结果以获得分组点,例如在PHP中:

$pings = array();
foreach($results as $row){
  $pings[$row['ping_id']][] = $row;
}

您将从多个端点遍历一->多关系,从而“选择所有点,其中ping_id=id”。但如何显示返回的信息取决于您。抱歉,我的sql脚本不是最新版本。所以我可以为您构造一个示例。我认为尝试在mysql中动态添加查询列是非常困难(或不可能的)(可能是在您的用户存储过程从未尝试过的情况下)。相反,您应该连接表并用您使用的某种语言对它们进行分组。请看我的答案。您将从多个端点遍历一->多关系,从而“选择所有点,其中ping_id=id”。但如何显示返回的信息取决于您。抱歉,我的sql脚本不是最新版本。所以我可以为您构造一个示例。我认为尝试在mysql中动态添加查询列是非常困难(或不可能的)(可能是在您的用户存储过程从未尝试过的情况下)。相反,您应该连接表并用您使用的某种语言对它们进行分组。请看我的回答。不过,你的陈述并没有贯穿整个表点。你知道怎么做吗?不过,你的陈述并没有横过表点表。你知道怎么做吗?