我想在MySQL中做的事情

时间:2014-01-25 08:22:07

标签: mysql sql relationship

我正在从网站上抓取大量数据,并制作了对我来说很有意义的表格结构。

现在,我试图根据关系将数据拉成一组。 所以我有一张桌子上装满了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中另一个表中的两个单独字段的正确方法是什么?

1 个答案:

答案 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