繁体   English   中英

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

[英]How to split a MySQL row into separate variables for each table in a join

如果要从JOIN查询中获取结果,如何在每一行的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
}

解:

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')) {

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM