如何将MySQL行拆分为连接中每个表的单独变量

时间:2016-09-15 05:21:01

标签: php mysql mysqli

如果我从JOIN查询中获取结果,如何为每行的连接中的每个表获取单独的变量?

例如:

$result = $mysql->query(sprintf('SELECT *
    FROM `TableOne` one
    JOIN `TableTwo` two ON (one.TwoID = two.TwoID)
    JOIN `TableThree` three ON (one.ThreeID = three.ThreeID)
    WHERE one.OneID = %u',
    (int)$primary_key));
while ($row = $result->fetch_assoc()) {
    // Instead of $row, I want:
    // $one: all fields from TableOne
    // $other: all fields from TableTwo and TableThree
}

1 个答案:

答案 0 :(得分:0)

解决方案:

function mysqli_fetch_assoc_per_table(mysqli_result $result, $instruction) {
    $row = $result->fetch_assoc();
    if (!$row) return false;
    $fields = $result->fetch_fields();

    $groups = array();
    foreach (explode(',', $instruction) as $arg) {

        $group = array();
        foreach (explode('|', $arg) as $table) {
            foreach ($fields as $field) {
                if ($field->table == $table) {
                    $group[$field->name] = $row[$field->name];
                }
            }
        }

        $groups[] = $group;
    }

    return $groups;
}

用法:

while (list($one, $other) = mysqli_fetch_assoc_per_table($result, 'one,two|three')) {

}