Dans un serveur MMORPG que je suis en train de refactoriser, j'ai deux tables. Un pour les objets, et un pour les sorts. Chaque objet a jusqu'à 5 sorts, donc je suis allé avec un format de matrice clairsemée, ayant 5 colonnes pour les ID de sorts.Éviter d'utiliser la même sous-requête plusieurs fois dans une requête
Les concepteurs originaux de cette structure ont choisi d'utiliser MyISAM qui ne prend pas en charge le référencement, ce qui fait que la table des éléments contient des éléments avec des ID de sorts inexistants. Je souhaite savoir quels éléments ont des ID de sorts incorrects afin de les corriger et peut-être à la longue convertir en InnoDB.
Jusqu'à présent, j'ai pu venir avec seulement ceci:
SELECT COUNT(*)
FROM items
WHERE spellid_1 NOT IN (SELECT entry FROM research.spell)
OR spellid_2 NOT IN (SELECT entry FROM research.spell)
OR spellid_3 NOT IN (SELECT entry FROM research.spell)
OR spellid_4 NOT IN (SELECT entry FROM research.spell)
OR spellid_5 NOT IN (SELECT entry FROM research.spell);
Y at-il une façon plus élégante de le faire?
EDIT: NULL spellid_n compte comme valide car cela signifie que l'élément n'a pas un sort dans cet emplacement.
est vrai, mais il n'y aura jamais plus de 5 sorts par article, et l'utilisation cas commun est d'aller chercher un article dans son intégralité, donc je crois encore rares matrice correspond mieux à cela. – MoshiBin
@Spidey Contrairement à l'eau, les spécifications gèlent rarement. Je suggérerais de suivre le conseil de Tony pour normaliser et pérenniser. –
Voté en baisse. Ne répond pas à la question. – hobodave