Объединение данных по идентификатору, который не является уникальным - PullRequest
1 голос
/ 09 декабря 2011

Скажем, у меня есть две таблицы, описанные ниже:

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)

и:

mysql> show columns from point;
+----------+------------------+------+-----+---------+----------------+
| Field    | Type             | Null | Key | Default | Extra          |
+----------+------------------+------+-----+---------+----------------+
| point_id | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| ping_id  | int(10) unsigned | NO   |     | NULL    |                |
| x        | float            | NO   |     | NULL    |                |
| y        | float            | NO   |     | NULL    |                |
| texture  | int(10) unsigned | NO   |     | NULL    |                |
| fish     | int(10) unsigned | NO   |     | NULL    |                |
+----------+------------------+------+-----+---------+----------------+

Ping_id для ping таблицы уникален.Однако ping_id для пункта нет.IE есть несколько точек для каждого ping_id.Мне нужно выбрать данные так, чтобы для каждого пинга было несколько столбцов x, y (количество точек не является постоянным).IE, я ищу вывод, который выглядит так:

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

Ответы [ 2 ]

1 голос
/ 09 декабря 2011

Вы должны присоединиться к таблицам:

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;
}
0 голосов
/ 09 декабря 2011

ВЫБРАТЬ * ОТ точки ПРИСОЕДИНИТЬ ping на point.ping_id = point.ping_id ГДЕ point.ping_id =?

...