2011-02-22 33 views
1

我有一个表是这样的:根据另一列的数据从MySQL表中获取数据的正确方法是什么?移调?

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

我想获取存储在列中的ID号,并从他们的另一个表中获取行。我希望从获得行的表是:

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一个用户ID来检索与之关联的ID,然后从namestable中检索正确的行?我读过这个称为转置,但我还没有找到一个简洁的例子。

任何想法?

回答

1

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列,但每ID为5行。

+0

关于'idstable将不会有5列,但每个ID为5行'的点,但我们试图在这种情况下优化速度,因为它是高容量搜索的一部分。我们正在尝试不同的方法。 – 2011-02-22 18:19:27

相关问题