【问题标题】:How to use $mysqli->result inside while loop?如何在while循环中使用$mysqli->result?
【发布时间】:2012-03-24 05:46:40
【问题描述】:

我正在处理从表中检索到的数据

<?php
    $result=$mysqli->query("SELECT value1, value2 FROM table1");
        while($row=$result->fetch_assoc())
        {
            $value1 =   $row['valu1'];
            $value2 =   $row['value2'];

            $mysqli->query("INSERT IGNORE INTO table2 (value1) VALUES ('$value1')");
            $result2    =   $mysqli->query("SELECT id FROM table2 WHERE value1='$value1'");
            $row2       =   $result2->fetch_assoc();
            $column1_id =   $row2['id'];
            $result2->close();

            $mysqli->query("INSERT IGNORE INTO table3 (value2) VALUES ('$value2')");
            $result3    =   $mysqli->query("SELECT id FROM table3 WHERE value1='$value2'");
            $row3       =   $result3->fetch_assoc();
            $column2_id =   $row3['id'];
            $result3->close();

            $mysqli->query("INSERT INTO table4 (value1,value2) VALUES ('$value1','$value2')");
        }
?>

但问题是sub-$result会和父级搞混,while循环只会在第一个循环中起作用。

【问题讨论】:

    标签: php mysql select mysqli


    【解决方案1】:

    最好的应该是这样

    insert ignore into table2 (value1) select value1 from table1;
    insert ignore into table3 (value2) select value2 from table1;
    insert ignore into table4 (value1, value2) select value1, value2 from table1
    

    这是优化的,我不认为你需要 SELECT id .. 和循环
    (我不知道你在你的例子中使用了结果)

    【讨论】:

    • 感谢您的建议,但这是讨论我的问题的简化版本;实际代码更复杂,对来自 table1 的值进行大量 php 处理。
    • 是的,明白这一点......然后你可以运行任何你想按摩数据的逻辑,并将其输出到一个文件,在进程结束时,做一个 mysql 导入?你需要明确描述你的编码环境,我是局外人,不知道你在想什么。无论如何,循环和插入是最糟糕的解决方案。
    • 情况并不奇怪;我有一个笨拙的数据表,我想通过在多个表中托管数据来创建一个规范化的数据库。在这个过程中,我想通过 PHP 处理文本(如格式化)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-01
    • 2020-05-17
    • 2013-05-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多