内部连接一个表中的两个外键

时间:2016-10-13 06:39:17

标签: mysql

我有查询sql进行搜索。我有两个表是内连接。这是我的表:

table_order
------------
id_order  id_user_order  id_user_taker  status
1          2              3              done
2          2              4              done

table_user
--------------
id_user    name
1          Alex
2          Jason
3          Danis
4          Lorent

我会像这样内心加入:

<?php
include'conn.php'
$qry = $conn->query("select table_order.*, table_user.name AS order_name, table_user.name AS taker_name FROM table_order INNER JOIN table_user ON table_user.id_user = table_order.id_user_order INNER JOIN table_user ON table_user.id_user = table_order.id_user_taker ");

while($data = $qry->fetch_assoc()){
echo $data['order_name'] . " " . $data['taker_name'];
}

?>

但是,无法显示。请解决我的问题。非常感谢

5 个答案:

答案 0 :(得分:3)

当您需要两次或多次加入同一个表时,必须为表使用适当的别名

 $qry = $conn->query("select 
              table_order.*
            , a.name AS order_name
            , b.name AS taker_name 
            FROM table_order 
            INNER JOIN table_user as a ON a.id_user = table_order.id_user_order 
            INNER JOIN table_user as b ON b.id_user = table_order.id_user_taker ");

答案 1 :(得分:0)

如果要在查询中多次使用同一个表,则需要为表名使用别名:

$qry = $conn->query("select table_order.*, table_user_o.name AS order_name, table_user_t.name AS taker_name 
FROM table_order INNER JOIN table_user table_user_o ON table_user_o.id_user = table_order.id_user_order 
        INNER JOIN table_user table_user_t ON table_user_t.id_user = table_order.id_user_taker");

答案 2 :(得分:0)

查询中的一些更改

public List<DesiredType> getInfo() {
        return daoObject.getUserInfo();
}

答案 3 :(得分:0)

看起来您需要订单和接受者的用户名以及table_order中的字段。如果是这种情况,那么您需要使用&#39; LEFT JOIN&#39;。

    select too.*, tuo.name AS order_name, tut.name AS taker_name FROM table_order too left join table_user tuo on tuo.id_user=too.id_user_order left join table_user tut on tut.id_user=too.id_user_taker

答案 4 :(得分:0)

尝试以下查询

select table_order.*, user.name FROM table_user user
        INNER JOIN table_order  ON   table_order.id_user_order = user.id_user
        where  table_order.id_order=1