已经有很多关于此的问题,但是我还没有找到任何可以解决我的特定问题的问题。我正在对 MySQL 数据库进行检查,如果超过 1 行具有相同的 BILLING_ID,我想将其打印出来,因为这些应该是唯一的,很少有异常(exception)。
但是,当它们具有不同值的 GAME_ID 时,我需要排除重复项,因为我们确实设置了具有相同计费 ID 的子服务。
我下面的代码大部分都有效,直到我的逻辑失败。如果有 2 个以上的条目具有相同的 Billing 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>';
}
}
最佳答案
无需循环和进行多次调用,只需使用一次数据库调用
子查询 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
关于php - 检查 MySQL 数据库是否有重复条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14621542/