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