为什么 mysql_fetch 的总和值翻倍了?
Why the sum value from mysql_fetch was double up?
我有一个 2 数据库。
1是game_jnship_user
,2是game_jnship_equip
,数据如下:
这里是game_jnship_user
+-----+-----------------+
| ID | uid |
+-----+-----------------+
| 1 | 50 |
+-----------------------+
这里是game_jnship_equip
+-----+------------+---------------+--------------+
| ID | uid | ebonus | etype |
+-----+------------+---------------+--------------+
| 1 | 50 | 100 | 1 |
| 2 | 50 | 10 | 1 |
| 3 | 50 | 120 | 2 |
+-------------------------------------------------+
我查询如下:
$_G['uid'] = '50';
$ushuxing = DB::query("SELECT sum(t2.ebonus) AS equipatk, sum(t3.ebonus) AS equipdef FROM ".DB::table('game_jnship_user')." t1 LEFT JOIN ".DB::table('game_jnship_equip')." t2 ON (t1.uid = t2.uid AND t2.etype = '1') LEFT JOIN ".DB::table('game_jnship_equip')." t3 ON (t1.uid = t3.uid AND t3.etype = '2') WHERE t1.uid = $_G[uid]");
$rushuxing = DB::fetch($ushuxing);
之后,我的输出数据如下:
$rushuxing[equipatk] = 110;
$rushuxing[equipdef] = 240;
为什么 $rushuxing[equipdef]
输出是 240
而不是 120
?
谢谢。
这是上例中的原始 MySQL 查询:
SELECT sum(t2.ebonus) AS equipatk, sum(t3.ebonus) AS equipdef
FROM game_jnship_user t1
LEFT JOIN game_jnship_equip t2
ON (t1.uid = t2.uid AND t2.etype = '1')
LEFT JOIN game_jnship_equip t3
ON (t1.uid = t3.uid AND t3.etype = '2')
WHERE t1.uid = '50'
在 LEFT JOIN
操作中,具有 etype = 2
的记录与具有 etype = 1
的 2 条记录匹配,因此您得到 240 而不是 120。
您可以改用以下利用 条件聚合 的查询:
SELECT SUM(CASE WHEN etype = 1 THEN ebonus ELSE 0 END) AS equipatk,
SUM(CASE WHEN etype = 2 THEN ebonus ELSE 0 END) AS equipdef
FROM game_jnship_equip
WHERE uid = 50
GROUP BY uid
子句不是必需的,因为您正在为 特定的 uid
值执行聚合。
我有一个 2 数据库。
1是game_jnship_user
,2是game_jnship_equip
,数据如下:
这里是game_jnship_user
+-----+-----------------+
| ID | uid |
+-----+-----------------+
| 1 | 50 |
+-----------------------+
这里是game_jnship_equip
+-----+------------+---------------+--------------+
| ID | uid | ebonus | etype |
+-----+------------+---------------+--------------+
| 1 | 50 | 100 | 1 |
| 2 | 50 | 10 | 1 |
| 3 | 50 | 120 | 2 |
+-------------------------------------------------+
我查询如下:
$_G['uid'] = '50';
$ushuxing = DB::query("SELECT sum(t2.ebonus) AS equipatk, sum(t3.ebonus) AS equipdef FROM ".DB::table('game_jnship_user')." t1 LEFT JOIN ".DB::table('game_jnship_equip')." t2 ON (t1.uid = t2.uid AND t2.etype = '1') LEFT JOIN ".DB::table('game_jnship_equip')." t3 ON (t1.uid = t3.uid AND t3.etype = '2') WHERE t1.uid = $_G[uid]");
$rushuxing = DB::fetch($ushuxing);
之后,我的输出数据如下:
$rushuxing[equipatk] = 110;
$rushuxing[equipdef] = 240;
为什么 $rushuxing[equipdef]
输出是 240
而不是 120
?
谢谢。
这是上例中的原始 MySQL 查询:
SELECT sum(t2.ebonus) AS equipatk, sum(t3.ebonus) AS equipdef
FROM game_jnship_user t1
LEFT JOIN game_jnship_equip t2
ON (t1.uid = t2.uid AND t2.etype = '1')
LEFT JOIN game_jnship_equip t3
ON (t1.uid = t3.uid AND t3.etype = '2')
WHERE t1.uid = '50'
在 LEFT JOIN
操作中,具有 etype = 2
的记录与具有 etype = 1
的 2 条记录匹配,因此您得到 240 而不是 120。
您可以改用以下利用 条件聚合 的查询:
SELECT SUM(CASE WHEN etype = 1 THEN ebonus ELSE 0 END) AS equipatk,
SUM(CASE WHEN etype = 2 THEN ebonus ELSE 0 END) AS equipdef
FROM game_jnship_equip
WHERE uid = 50
GROUP BY uid
子句不是必需的,因为您正在为 特定的 uid
值执行聚合。