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中动态添加查询列是非常困难(或不可能的)(可能是在您的用户存储过程从未尝试过的情况下)。相反,您应该连接表并用您使用的某种语言对它们进行分组。请看我的回答。不过,你的陈述并没有贯穿整个表点。你知道怎么做吗?不过,你的陈述并没有横过表点表。你知道怎么做吗?