PHP MySQL:使用一个查询从多个表中获取所有关联的行?

时间:2016-03-04 21:10:29

标签: php mysql join array-merge

对于食谱应用程序,我有一个表存储一般食谱信息和一个ID。然后我有几个其他的表格表存储相关的数据,如成分,说明,笔记等。目前,我正在使用多个简单的SQL语句来获取和连接所有这些数据。

但是我现在需要将整个结果(与一个食谱相关的所有内容,通过其“recipe_id”)放到一个单独的数组中,以便我可以将它作为一个实体进行操作。

我首先尝试array_merge,但后来继续使用JOIN,但我不确定他们是否按照我喜欢的方式行事。这是我需要采取的路线还有其他选择吗?

这是我目前的代码:

$conn = connDB();
    // Get basic recipe data
    $sql = "SELECT recipe_id, date_created, name, description, author, cooktime, preptime, totaltime, yield, category_id, cuisine_id, image, image_url, url FROM recipes WHERE recipe_id=" . $recipe_id . " LIMIT 1";
    $result = $conn->query($sql);

    // Check that we get a result - ie a valid recipe_id
    if ($result->num_rows > 0) {
        $basicrow = $result->fetch_assoc(); 

        // Get ingredients
        $sql = "SELECT recipe_id, ingredient_id, ingredient, uom_id, ingredient_quant FROM ingredients WHERE recipe_id=" . $recipe_id . "";
        $ingredientresult = $conn->query($sql);
        $ingredientrow = $ingredientresult->fetch_assoc();  

        // Get Units Of Measurements
        $sql = "SELECT uom_id, uom_long, uom_short FROM uom";
        $uomresult = $conn->query($sql);

        if ($uomresult->num_rows > 0) {
            $uomArray = array();
            while($uomrow = $uomresult->fetch_assoc()) {
                $uomArray[$uomrow['uom_id']]["uom_id"] = $uomrow['uom_id'];
                $uomArray[$uomrow['uom_id']]["uom_long"] = $uomrow['uom_long'];
                $uomArray[$uomrow['uom_id']]["uom_short"] = $uomrow['uom_short'];
            }
        }

        // Get instructions
        $sql = "SELECT recipe_id, instruction_id, instruction FROM instructions WHERE recipe_id=" . $recipe_id . "";
        $instructionresult = $conn->query($sql);

        // Get notes
        $sql = "SELECT recipe_id, date_created, note FROM notes WHERE recipe_id=" . $recipe_id . "";
        $notesresult = $conn->query($sql);

    } else {
        echo "No such recipe"; // Not a valid recipe_id
    }

    $conn->close();

1 个答案:

答案 0 :(得分:0)

您可以创建以配方ID为键的关联数组,然后您可以遍历它们并以您想要的形式组合信息。使用连接是在一个数组中获取此数据的最佳方法。我唯一需要注意的是查询运行需要多长时间。我个人使用了这两种方法,这取决于我正在尝试做什么,以及有问题的页面加载需要多长时间。