使用相同的表别名左连接多个表(只有一个会根据条件加载)

我有一个我们在数据库中使用的表列表,用于存储在其自己的数据库中的产品。我使用此代码设置了一组“表格”。


$TABLES_QUERY = $db1q->query("SELECT t.table FROM Product_Tables as t WHERE t.visibility = 1 ORDER BY t.sort_order ASC") or die ('Unable to execute query. '. mysqli_error($db1q));

    if ($TABLES_QUERY->num_rows > 0) { 

    while ($TABLES = $TABLES_QUERY->fetch_assoc()) {

        $query_tables_array[] = $TABLES['table'];

    }

    }

我试图在我们的库存系统中做的是从正确的表中提取数据,而不必写出每个表,并且每个表都有一个唯一的表别名。这意味着每次创建新的产品表时,都必须更新代码。我宁愿将该表添加到表数据库中,并且代码仍然有效....


下面是我试图使用的代码......


if (!empty($query_tables_array)) {

    foreach ($query_tables_array as $val) { 

        $SKU_QUERY .= " LEFT JOIN ". $val ." as ptbl ON

    (s.product_table='". $val ."' and ptbl.id = s.part_number_id)";

    }

    }

有条件应用于表,所以只应调用一个,但它抛出错误


不是唯一的表/别名:'ptbl'


有没有正确的方法可以做到这一点?


我在 SELECT 查询中使用 ptbl 从 LEFT JOIN'D 表中获取数据,因此如果有办法,我希望能够像我尝试的方式那样执行此操作。


这可能很令人困惑,所以如果您有任何其他问题,请告诉我。


aluckdog
浏览 176回答 1
1回答

喵喵时光机

问题是 $query_tables_array 有多个项目,您只能在同一个查询中使用一次别名。我会把它改成if (!empty($query_tables_array))   { foreach ($query_tables_array as $val)     { $SKU_QUERY .= " LEFT JOIN ". $val ."       ON (s.product_table='". $val ."' and $val.id = s.part_number_id)";     }   }
打开App,查看更多内容
随时随地看视频慕课网APP