我有多个生物在数据库(Mysql)和6个不同的领域。目前所有的生物出现在任何地方,但我想让一些出现在一个地点或多个选定的地点。
我现在要解决的方法是,每个位置都有从1到9的id。墓地= 1,沼泽= 2,森林= 3,洞穴= 4。然后把它保存在作为字段where_creature_appears保存的生物表中。
where
12 appears only in Graveyard and Swamp;
23 appears only in Swamp and Forest;
124 appreas only in Graveyard, Swamp, Caves;
etc
对于sql,我将使用WHERE LIKE % $location_id %
。如果我有更多的地点,那么我也可以扩展到信件。
问题是,是否有更好的方法,或更简单,或更聪明。如果有人能用链接或想法指出有用的方向,那就高兴了。
谢谢你的帮助!
发布于 2020-04-08 11:22:02
您可以通过多一个表来实现这一点,这将是多到多的表。
基本上,在那个表中,如果那个生物在那个特定的区域和相反的区域,你就会得到这个信息。因为,许多生物可以在许多地区,许多地区可以有许多不同的生物。
那张桌子应该是这样的:
表名:creature_area
creature_id | area_id
----------------------
1 | 2
1 | 3
3 | 2
5 | 1
然后,您将能够查询特定生物的所有区域,以及特定区域的所有生物,如下所示:
把所有区域的身份证给我,因为这个生物在:
SELECT area_id FROM creature_area WHERE creature_id = ....
把这个地区所有生物的身份证给我:
SELECT creature_id FROM creature_area WHERE area_id = ....
然后你可以做所有类型的JOIN
来获取那些生物/区域的名字等等。
有关如何实现这一目标的更多详细信息,请参见:https://dzone.com/articles/how-to-handle-a-many-to-many-relationship-in-datab
我希望这能帮到你。
https://stackoverflow.com/questions/61099140
复制相似问题