我正在尝试将12个数字的列表运行到mysql查询中。该列表包含重复项,这些重复项在查询结果中被忽略,从而更改了列表的总长度。如果我缺少基本知识,我仍在学习mysql的潜在功能,因此深表歉意。该代码已被应用到允许通过不和谐玩交易卡游戏的机器人上。
我尝试了人们在这里做出的多种不同结果,但是我没有达到预期的效果。从联盟所有人到加入,似乎无济于事。当然,我还没有看到有人处于与我完全相同的位置。
masterlist是同一数据库中的表,该表是52行的列表。
array是一个12个数字的数组,可以在主列表的ID字段中找到。该数组源自两个玩家在纸牌游戏的较早步骤中制作的表格。
type是与ID对应的值。每种类型在多个ID之间共享。
con.query(`SELECT a.id, a.type FROM masterlist a,
(SELECT id, type
FROM masterlist
WHERE id in (${array.join(", ")})
GROUP by id, type
HAVING COUNT(*) > 1 ) b
WHERE a.id = b.id
AND a.type = b.type`
这将返回一个空数组。
问题是数组中的任何重复数字都将被忽略。该查询的结果将在单独的列表中具有与之匹配的id(type [0]将对应于id [0]。将根据类型随机选择结果之一。如果重复,则忽略这一点,这减少了随机选择id的机会。我希望这是有道理的。这是针对一种不和谐的机器人,它允许玩家彼此玩交易卡游戏,因此,使机会尽可能公平非常重要。>
我想要列出所有12个值(类型)的结果,查询完成后在单个数组中包含重复项(不对重复值进行分组)。效率并不是真正的问题,因为主列表不会有成千上万的条目。在这一点上,我只想要一些功能,即使它需要几个不同的查询才能完成。
编辑: 这是要打印到控制台的内容。 https://i.gyazo.com/b843d8831d7801f14f34edc94a2a1831.png 第一行是从游戏中的两位玩家输入后最初存储数字的表中获取的数字数组。第二行是按升序排序的相同数字。上面查询的结果是第三行,只是一个空数组。
预期结果应该是这样,除了它应该有12个值而不是11。https://i.gyazo.com/fffd26c1628fbb2374070f7154c28b7b.png “数组”中的原始值集具有12个数字,其中值7具有重复项。此值数组是从此https://i.gyazo.com/151ebf67c0f2871661bd819e3c8865f9.png打印出来的,将其传递到查询中时没有任何子查询,联接或联合。据我所知,此查询仅在ID不同时才在结果中列出唯一值。我希望传递给一个或多个查询的数字列表检索与之关联的所有12种类型,并按与上面排序的数组输入相同的顺序列出。
例如,原始数组是这样的:
[ '1', '4', '5', '7', '7', '8', '12', '17', '24', '38', '45', '48' ]
这是我期望的输出结果:
[ 'greenfist',
'greenfist',
'greenfist',
'greenfist',
**'greenfist',**
'greenfist',
'greenfist',
'flamefist',
'shield',
'magicshield',
'helix',
'helix' ]
带有**的值是来自数组的7的重复项,该查询在不使用联合,联接或子查询的查询中被忽略。输入也可能具有重复项,三重项,四重项等,因此它需要能够列出所有副本。
EDIT2:这是“主列表”的表。 https://i.gyazo.com/41571f2da48d11373f884d23b4e3e92d.png 注意:到目前为止,为了简化起见,我在文章中将Coreid更改为“ id”。运行代码时,我放置了正确的变量。列出的ID的名称是纸牌游戏中的“核心”,所以我觉得那是多余的。我不需要此查询中的effect1,faction1,effect2或faction2信息。我只需要coreid和类型。
谢谢!