我从网站上抓取了大量数据,并精心设计了对我来说有意义的表格结构。
现在,我正在尝试根据关系将这些数据分组。 所以我有一张 table ,里面装满了 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
<小时/>
将同一个表中的 2 个单独行连接到 mysql 中另一个表中的两个单独字段的正确方法是什么?
最佳答案
What is the proper way to join 2 separate rows from the same table onto two separate fields in another table in 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
<小时/>
评论中的评论:
If I give the table i'm joining from two separate aliases I can use it twice. A hundred times.
我意识到这是开玩笑,但这里有一个琐碎的事实:在 MySQL 中,你不能在一个查询中有一百个连接,有一个内置的 limit of 61 table in a single query .
关于mysql - 我想在 MySQL 中做的事情,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21348325/