我的MySQL数据库中有两个表。一个包含requiredSkill1
,requiredSkillLevel1
,requiredSkill2
,requiredSkillLevel2
,requiredSkill3
和requiredSkillLevel3
。
另一个表每个用户有X行,包含以下列:skill
和level
。
itemid requiredSkill1 requiredSkillLevel1 requiredSkill2 requiredSkillLevel2 requiredSkill3 requiredSkillLevel3
2410 3319 4 20211 1 NULL NULL
另一张表:
userid skill level
21058 3412 4
21058 3435 2
21058 3312 4
请记住,这些只是示例。
我希望每个itemid
在requiredSkill{1-3}
和requiredSkillLevel{1-3}
中具有匹配值。
这甚至可以通过单个查询实现,并且这仍然是高性能的,因为用户表每个用户最多包含300行,而item表具有6000行的固定值。这将在Web应用程序中使用,因此我可以使用Ajax从数据库加载项目范围以减少加载时间。
答案 0 :(得分:0)
我没有设置数据。 SQL Fiddle会有所帮助,但我想你想这样做:
SELECT itemid FROM items i
INNER JOIN users u1 ON u1.skill = i.requiredSkill1 AND u1.level >= i.requiredSkillLevel1
INNER JOIN users u2 ON u2.skill = i.requiredSkill2 AND u2.level >= i.requiredSkillLevel2 AND u1.userid = u2.userid
INNER JOIN users u3 ON u3.skill = i.requiredSkill3 AND u3.level >= i.requiredSkillLevel3 AND u3.userid = u1.userid
如果您发布演示数据,有人会为您解决此问题。