【问题标题】:how to LEFT JOIN a table where column's ids are in an $Array object如何 LEFT JOIN 列 ID 在 $Array 对象中的表
【发布时间】:2017-05-29 14:44:09
【问题描述】:

我有以下$table2Status 的数组:

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

这是从table2 whichhas no index totable1`中获取的,但它需要是一对多的关系,它们唯一的共同点是 两个表都是另一个表的索引状态。

我需要以某种方式附加来自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;

}

【问题讨论】:

  • SELECT t1.date, t1.status, t2.name_one, t2.name_two, t2.status .... GROUP BY t1.id 是无效的 SQL psce.com/blog/2012/05/15/…
  • 显示两个表的架构。你说没有索引,但是如果你要加入它们,两个表之间必须有某种关系是什么关系?
  • 另外,如果变量 $t2_status 如下所示,那么在 WHERE 的 IN 子句中它不是正确的 SQL 语法。基本上,正如所写,t1 中的每一行都将匹配 t2 中 in 子句匹配的所有行。这将是没有行,因为 $t2_status 的内容就 SQL 而言是无意义的。
  • @SloanThrasher,我试图理解你的观点。在我内爆t2_status 之后,我会得到(2,14),另一方面,在我的table1 中,我的列status 具有匹配值。所以我使用WHERE table1.status IN (2,14)
  • 但这是一个数组,而不是字符串。然后,您需要使用逗号分隔符将其内爆。第二条评论是您的 ON 子句中没有任何独特的东西可以表达 t1 和 t2 之间的关系。

标签: php mysql sql


【解决方案1】:

我试图查看是否有一种方法可以使用数组加入表格,但我想没有更便宜/更快捷的方法,所以我最终通过在 table2 中添加另一列 T1_id 和获取 table1.id 索引。然后我简单地将ON t1.status IN ($t2.status) 更改为ON t2.T1_id = t1.id

它看起来工作正常。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-09-27
    • 2018-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-20
    • 1970-01-01
    相关资源
    最近更新 更多