【发布时间】: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 之间的关系。