1

关于这个问题已经有很多问题了,但是我还没有找到任何可以解决我的特定问题的问题。我正在对 MySQL 数据库进行检查,如果超过 1 行具有相同的 BILLING_ID,我想将其打印出来,因为这些应该是唯一的,极少数例外。

但是,当它们具有不同值的 GAME_ID 时,我需要排除重复项,因为我们确实设置了具有相同计费 ID 的子服务。

我下面的代码大部分都可以工作,直到逻辑失败。如果有 2+ 个条目具有相同的计费 ID,我需要检查它们是否具有相同的 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 而不是空洞的 MySQL GROUP BY 扩展

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 回答