1

これに関してはすでに多くの質問がありますが、私の特定の問題に対処するものは見つかりませんでした。MySQLデータベースでチェックを実行していますが、複数の行に同じBILLING_IDがある場合は、まれな例外を除いて一意である必要があるため、出力したいと思います。

ただし、同じ請求IDで子サービスを設定するため、GAME_IDの値が異なる場合は重複を除外する必要があります。

以下の私のコードは、ロジックが失敗するまでほとんどの部分で機能します。同じ請求IDを持つエントリが2つ以上ある場合は、それらが同じGAME_IDを持っているかどうかを確認する必要があります。私はこれに困惑し、どのように進めるかがわかりません。

$res_services = mysql_query('SELECT SERVICE_ID, BILLING_ID, USER_ID, GAME_ID FROM tc_services', $tca_conn);

while ($row_services = mysql_fetch_array($res_services))
{
    $service_id = $row_services["SERVICE_ID"];
    $billing_id = $row_services["BILLING_ID"];
    $user_id = $row_services["USER_ID"];
    $game_id = $row_services["GAME_ID"];

    // If the Billing ID field is blank, ignore
    if ($billing_id == "")
    {
        continue;
    }

    $res_dupes = mysql_query("SELECT * FROM tc_services WHERE BILLING_ID='" . $billing_id . "'", $tca_conn);
    $num_rows = mysql_num_rows($res_dupes);

    if ($num_rows >= 2)
    {
        while ($row_dupes = mysql_fetch_array($res_dupes))
        {
             //check if GAME_ID is different
        }

        echo 'Duplicate Services found for User ID: ' . $user_id . 'Billing ID: ' . $billing_id . '</br>';
    }
}
4

2 に答える 2

2

ループして複数の呼び出しを行う代わりに、単一のデータベース呼び出しを使用するだけです

サブクエリXは、BILLING_ID、GAME_IDの重複を識別します。
次に、参加してUSER_IDを取得します

注:この標準SQLを使用する必要があり、非常識なMySQLGROUPBY拡張機能は使用しないでください

SELECT
    t.BILLING_ID, t.USER_ID
FROM
    (
    SELECT
        BILLING_ID, GAME_ID, COUNT(*)
    FROM
        tc_services
    GROUP BY
        BILLING_ID, GAME_ID
    HAVING
        COUNT(*) > 1
    ) X
    JOIN
    tc_services t ON X.BILLING_ID = t.BILLING_ID AND X.GAME_ID = t.GAME_ID
于 2013-01-31T08:45:31.423 に答える
0

これの代わりに

$res_dupes = mysql_query("SELECT * FROM tc_services WHERE BILLING_ID='" . $billing_id . "'", $tca_conn);

これを使って :

$res_dupes = mysql_query("SELECT * FROM tc_services WHERE BILLING_ID='" . $billing_id . "' AND GAME_ID='" . $game_id . "'", $tca_conn);

同じ選択クエリでゲームIDを確認できます。

于 2013-01-31T08:44:22.373 に答える