如何LEFT JOIN一个表,其中列的ID在$ Array对象中

时间:2017-05-29 14:44:09

标签: mysql sql mysqli

我有$table2Status的以下数组:

[{
    "Status_for_t2”:”2”,”id": "4"
}, {
    "Status_for_t2": "14",
    "id": "6"
}]

table2 has no index to table1`获取,但它需要是一对多的关系,他们唯一的共同点就是 两个表都是另一个表的索引状态。

我需要以某种方式追加来自table2的列,我想将table2 id添加到我的数组中,以便我可以 离开加入table2,但我不知道该怎么做。我试过这个ON t1.status IN ($t2_status)ON t1.status = 't2.status',但显然它们是错的,查询不会扫描正确的密钥  数组,它只填充我的数组的第一个索引。我觉得我应该在WHERE之后添加一些内容。

我在这里缺少什么?这样做的正确方法是什么?我如何桥接这两张桌子?

任何帮助都将不胜感激。

function theResult ( $table2Status) {

    $t2_status = implode( ',', array_column( $table2Status, ’Status_for_t2’ ) );
    $t2_id= implode( ',', array_column( $table2Status, 'id' ) );
    //echo json_encode($theUserEvrIDs);

    $sql =
        "SELECT 

        t1.date,
        t1.status,

        t2.name_one,
        t2.name_two,
        t2.status

        FROM table1 as t1

        Left JOIN table2 as t2
        ON  t1.status  IN ($t2.status)      

    WHERE 
        t1.status IN ($t2_status)) 

    GROUP BY t1.id 
    HAVING COUNT(DISTINCT t1.status ) ORDER BY t1.date ASC";

    $result = $this->conn->query( $sql );

    while ( $row = mysqli_fetch_assoc( $result ) )
        $returnArray[] = $row;

    return $returnArray;

}

1 个答案:

答案 0 :(得分:0)

感谢@SloanThrasher和@RaymondNijland协助我。

我试图看看是否有办法使用数组加入表格,但我想这里没有更便宜的/快捷方式,所以我最后通过添加另一列T1_id来创建关系table2并获取table1.id索引。然后,我只需将ON t1.status IN ($t2.status)更改为ON t2.T1_id = t1.id

看起来它工作正常。

然而,我仍然想知道是否有其他方法。

由于