0

这是我的代码:

    <?php

        if(isset($_POST['submit']) & !empty($_POST['appid'])) {

        $app = mysql_real_escape_string($_POST['appid']);

        //database parameters

        $conp = mysqli_connect($hostname, $user, $password, $database) or die('error in connection' . mysqli_error());

        //actual data for appid's

        $appsi = mysqli_query($conp, "SELECT distinct package_name FROM `user_app` where `app_id` = '$app'");

        $all = array();

        while($row = mysqli_fetch_assoc($appsi)) {

        $all[] = $row["package_name"]; // array problem

    }


    foreach ($all as $value) {

        $install = mysqli_query($conp, "SELECT COUNT(*) AS installs from `install` where package_name = '$value'");

        $row = mysqli_fetch_assoc($install);
        $data[] =  '<b>' .$row["installs"] . '</b>';


        $reg = mysqli_query($conp, "SELECT COUNT( DISTINCT `imei_num` ) AS reg FROM `user_app` WHERE package_name = '$value'");

$row = mysqli_fetch_assoc($reg);

$regd[] =  '<b>' .$row["reg"] . '</b>';

    }



 }

    mysqli_close($conp);

    ?>



    <html>
    <head>

        <title>script</title>

    </style>
    </head>

    <body>

    <span style="text-align: center"><h1>Beta</h1></span>


        <form name="query" action="<?php echo htmlentities($_SERVER['PHP_SELF']); ?>" method="post">

        <p>Enter Application-Specific Id:</p> 

        <select name='appid'>

        <?php 

        $conp = mysqli_connect($hostname, $user, $password, $database) or die('error in connection' . mysqli_error());

        $getid = mysqli_query($conp, "SELECT distinct `app_id`, `appidt` from `user_app` group by `app_id`") or die('get data failed' . mysqli_error());

            while(($row = mysqli_fetch_assoc($getid)) != null)  {

                echo "<option value = '{$row['app_id']}' selected = 'selected'";

                    if ($selected == $row['app_id']) {

                        echo "selected = 'selected'";

                    }

                echo ">{$row['appidt']}</option>";
            }

    mysqli_close($conp);

    ?>

        </select>



        <p><input type="submit" name="submit" value="Go" /></p>

        </form>

        <div>

            <p><?php echo '<br />' .'<b>'. 'Application Id : '. $app . '</b>'; ?> </p>
            <hr />
            <table border=2px width=100%>
                <tr>
                    <th><b>App Packages</b></th>
                    <th><b>Registrations</b></th>
                    <th><b>Installs</b></th>
                </tr>


                <tr>
                    <td><?php echo implode("<br><br>", $all); ?></td>
                    <td align="center"><?php echo implode("<br><br>", $regd); ?></td>
                    <td align="center"><?php echo implode("<br><br>", $data); ?></td>
                </tr>

            </table>

            <p><?php echo "$name"; ?></p>

        </div>

    </body>
    </html>

我在一个数组中获取我的所有包名称:all[],包的范围可能是 10 或 20,之后我想要所有下载对应于另一个表名上的downloads包和另一个表上的包app_packages

我不能使用连接,因为包表包含特定的包,但下载包含许多与包对应的下载。

因此,我将所有包放入 all[] 并在 foreach 循环名称 $value 中使用它们,现在我得到每个包的所有安装,我可以通过 implode 函数显示它。但是在我的前端,当我从下拉列表中选择一个 appid 时,如您所见,检索每个包的下载数将花费大量时间。这不是我想要展示的,因为它非常耗时。

请看这个问题,如果我在解释中遗漏了什么,那么我道歉,提示我并提及它。

4

1 回答 1

1

在循环中使用查询是一个坏主意。这就是你得到缓慢结果的原因。它在每次迭代时都会触及数据库。您可以使用子查询或加入作为替代方式来执行此操作。

于 2012-07-21T13:00:57.147 回答