2014-01-25 41 views
0

我从网站上搜集了大量的数据,并制作了对我来说合理的表格结构。我想在MySQL中做的事情

现在,我试图根据关系拉取数据集。 所以我有一张桌子满了coin_a coin_b交易。

OPEN_TRADES: coin_id_a coin_id_b exchange_id action_type price amount time 

我想要做的是从ID_A和ID_b的硬币表中加入数据。

COINS: id name short_name 

我开始了与此:

SELECT `op`.`coin_id_a`, `op`.`coin_id_b`, `op`.`exchange_id`, 
    `op`.`action_type`, `op`.`price`, `op`.`amount`, `op`.`time`, 
    `c`.`name` , `c`.`short_name` 
    FROM `open_trades` as `op` 
     LEFT JOIN `coins` as `c` 
      ON `op`.`coin_id_a`=`c`.`id` 

这个工程完全按照我预期。但它只能解决我想要的一半数据。 我想再次为coin_id_b执行此连接。

我只是没有正确的工具在我的腰带下执行此操作。坦率地说,错误我:D

我知道我可以在PHP中做到这一点,事实上我正是这样做。问题是它在php中效率不高。 我知道我的数据库会更快地做到这一点。特别是因为我的交易表在内存中运行。

结果的模式,我希望创建看起来像这样:

coin_id_a coin_id_b exchange_id action_type price amount time id_a name_a 
short_name_a id_b name_b short_name_b 

什么是加入从同一个表2分分别排在两个不同领域的另一个表在MySQL的正确方法?

+0

你的意思是像'LEFT JOIN硬币一样c ON op.coin_id_a = c.id或op.coin_id_b = c.id'? – maja

+0

不,因为我需要**硬币数据** ** coin_id_a和coin_id_b。 – Nocare

+0

你的意思是[交叉连接](https://en.wikipedia.org/wiki/Join_(SQL)#Cross_join)? –

回答

0

什么是正确的方式将2个单独的行从同一个表中连接到mysql中另一个表中的两个单独的字段?

为该表提供两个不同的别名,并为所选列提供唯一的别名。

考虑您的架构,它可能是这样的:

SELECT 
     op.coin_id_a, op.coin_id_b, op.exchange_id, 
     op.action_type, op.price, op.amount, op.time, 
     coin_a.id AS id_a, coin_a.name AS name_a, coin_a.short_name AS short_name_a, 
     coin_b.id AS id_b, coin_b.name AS name_b, coin_b.short_name AS short_name_b 
FROM open_trades AS op 
LEFT JOIN coins AS coin_a 
ON op.coin_id_a = coin_a.id 
LEFT JOIN coins AS coin_b 
ON op.coin_id_b = coin_b.id 

在评论中说了一句话:

如果我给我我从两个不同的别名加入表我可以使用它两次。 百倍。

我意识到这是在开玩笑说,但这里有一个事实琐事尽管如此:在MySQL中,你不能有一百联接在一个查询中,有一个内置的limit of 61 table in a single query

+0

感谢您等待雅来发布答案。 这相当有趣。 61.我会记住的。 – Nocare

相关问题