1.表的结构如下
CREATE TABLE `t_player_item` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`player_id` int(11) NOT NULL COMMENT '玩家id',
`uid` varchar(60) NOT NULL COMMENT '唯一id',
`item_code` int(11) NOT NULL DEFAULT '0' COMMENT '物品code',
`item_amount` int(11) NOT NULL DEFAULT '0' COMMENT '数量',
`pos_type` int(11) NOT NULL DEFAULT '0',
`js_str` varchar(3000) NOT NULL DEFAULT '' COMMENT 'js格式字符串',
`create_dt` datetime NOT NULL DEFAULT '2011-01-01 00:00:00' COMMENT '建创时间',
PRIMARY KEY (`id`),
KEY `idx_player_id` (`player_id`) USING BTREE,
KEY `idx_player_item_uid` (`uid`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=12434376 DEFAULT CHARSET=utf8 COMMENT='玩家物品';
需要从中找到拥有两件相同物品且 pos_type均 为1的玩家
使用group by 和 having的结合
sql语句:
SELECT DISTINCT(player_id) FROM t_player_item WHERE pos_type=1
GROUP BY player_id
HAVING COUNT(item_code)!=COUNT(DISTINCT item_code);
使用联合查找
SELECT
username,
b.item_code,
c.overlay,
count(b.player_id) AS num
FROM
t_player AS a,
t_player_item AS b,
fanren_sy_config.t_item AS c
WHERE
a.player_id = b.player_id
AND b.pos_type = 1
AND b.item_code = c.`code`
AND c.overlay > 1
GROUP BY
b.player_id,
b.item_code
HAVING
num > 2;