Как правильно получать данные из таблицы MySQL на основе столбцов из другой?Транспонирование? - PullRequest
1 голос
/ 22 февраля 2011

У меня есть такая таблица:

idstable
+--------+-----+-----+-----+-----+-----+
| userid | id1 | id2 | id3 | id4 | id5 |
+--------+-----+-----+-----+-----+-----+
|   1    |  6  |  2  |  52 |  32 |  16 |
+--------+-----+-----+-----+-----+-----+
|   2    |  12 |  5  |  18 |  21 |  5  |
+--------+-----+-----+-----+-----+-----+
|  ...   | ... | ... | ... | ... | ... |

который я хочу получить идентификаторы, хранящиеся в столбцах и получить строки из другой таблицы с ними. Таблица, из которой я хочу получить строки:

namestable
+----+----------+
| id |   name   |
+----+----------+
| 6  |   Bruce  |
+----+----------+
| 2  |   Mary   |
+----+----------+
| 52 |   Dick   |
+----+----------+
| 32 |   Bob    |
+----+----------+
| 16 |   Jack   |
+----+----------+
| .. |   ...    |

Набор результатов, который я пытаюсь получить, выглядит примерно так:

+------+----+-------+
| User | id | name  |
+------+----+-------+
| 1    | 6  | Bruce |
+------+----+-------+
| 1    | 2  | Mary  |
+------+----+-------+
| 1    | 52 | Dick  |
+------+----+-------+
| 1    | 32 | Bob   |
+------+----+-------+
| 1    | 16 | Jack  |
+------+----+-------+

Как я могу запросить idstable с идентификатором пользователя, чтобы получить связанные с ним идентификаторы, а затем получить правильные строки из namestable? Я читал, что это называется транспонированием, но я пока не нашел краткого примера.

Есть идеи?

1 Ответ

1 голос
/ 22 февраля 2011

join

SELECT idstable.id as User, namestable.id as id, namestable.name as name
FROM idstable it
JOIN namestable nt on (nt.id = it.id1 or nt.id = it.id2 ... 3,4,5 like the first two)

В идеале, ваш idstable должен иметь не 5 столбцов, а 5 строк на идентификатор.

...