我正在从网站上抓取大量数据,并制作了对我来说很有意义的表格结构。
现在,我试图根据关系将数据拉成一组。 所以我有一张桌子上装满了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执行此连接。
我根本没有正确的工具在MySQL中执行此操作。坦率地说,这让我感到困惑: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
将同一个表中的两个独立行连接到mysql中另一个表中的两个单独字段的正确方法是什么?
答案 0 :(得分:0)
将同一个表中的两个独立行连接到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。