检查MySQL数据库是否有重复条目

时间:2013-01-31 08:40:17

标签: php mysql whmcs

关于此问题已经有很多问题,但是我没有找到任何解决我的特定问题的问题。我正在对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>';
    }
}

2 个答案:

答案 0 :(得分:2)

只需使用单个数据库调用

,而不是循环并进行多次调用

子查询X标识BILLING_ID,GAME_ID的重复项 然后我们联接回来获取USER_ID

注意:您必须使用此标准SQL而不是inane 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

答案 1 :(得分: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。