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

パッケージテーブルには特定のパッケージが含まれているため、joinを使用できませんが、ダウンロードにはパッケージに対応する多数のダウンロードが含まれています。

したがって、すべてのパッケージをall []に入れ、それらをforeachループ名$ valueで使用します。これで、パッケージごとにすべてのインストールを取得し、implode関数を介して表示できます。しかし、私のフロントエンドでは、ご覧のとおりドロップダウンからappidを選択すると、パッケージごとのダウンロード数を取得するのに非常に時間がかかります。非常に時間がかかるので、これは私が表示したいものではありません。

この問題を見てください、そして私が説明で何かを逃しているならば、私は謝罪します、私に促して、そして私はそれについて言及します。

4

1 に答える 1

1

クエリをループで使用するのは悪い考えです。それがあなたが遅い結果を得ている理由です。各反復でデータベースに触れます。別の方法として、サブクエリまたは結合でこれを行うことができます。

于 2012-07-21T13:00:57.147 に答える