2017-05-29 31 views
0

我有$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; 

} 
+0

'选择 t1.date, t1.status, t2.name_one, t2.name_two, t2.status .... GROUP BY t1.id'无效SQL HTTPS ://www.psce.com/blog/2012/05/15/mysql-mistakes-do-you-use-group-by-correctly/ –

+0

显示两个表的架构。你说没有索引,但是如果你要加入他们,那么两张表之间必须有一些关系。什么是关系? –

+0

另外,如果变量$ t2_status如图所示,那么在您的WHERE的IN子句中它将不会是正确的SQL语法。基本上,按照写法,t1中的每一行都将匹配in子句匹配的t2中的所有行。由于$ t2_status的内容对于SQL而言是无稽之谈,因此它不会成为行。 –

回答

0

感谢@SloanThrasher和@RaymondNijland帮助我解决这个问题。

我想看看是否有一种方法来加入一个表使用数组,但我想没有一个更便宜的/快捷方式,所以我最终创建了一个关系,通过在表2中添加另一列T1_id并获取table1.id编入索引。然后我简单地将ON t1.status IN ($t2.status)更改为ON t2.T1_id = t1.id

它看起来像工作正常。

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

感谢

相关问题