2011-03-31 3 views
2

Je suis en train de mettre en place un système de suivi des défis quotidiens pour un jeu vidéo. Il y a 4 défis quotidiens et un défi hebdomadaire. Chaque défi est sauvegardé dans une table avec un identifiant, qui peut être réutilisé, le défi est réutilisé (ce qui est le cas, environ 22% du temps). J'ai une autre table pour stocker les défis de chaque jour, il ressemble à ceci:Aide pour simplifier cette requête MySQL

date | daily1 | daily2 | daily3 | daily4 | expiration

Puisque les défis sont réutilisés, j'aimerais pouvoir rechercher d'autres jours où un défi a été utilisé, par son ID. J'utilise cette requête en ce moment:

SELECT date FROM `current_daily` 
    WHERE daily1 = # 
    OR daily2 = # 
    OR daily3 = # 
    OR daily4 = # 
    ORDER BY date ASC 

Cela fonctionne, mais c'est si maladroit. J'essaye de trouver un meilleur était d'exécuter cette question ainsi je n'ai pas besoin de tous les ORs, mais puisqu'il obtient l'information de plusieurs colonnes, il ne semble pas que je puisse employer IN(). Existe-t-il une autre façon de simplifier cette requête et de toujours obtenir la même information?

+1

Je ne pense pas que vous serez en mesure de simplement tout simplement votre SQL sans restructurer vos tables. –

Répondre

0

Vous pouvez utiliser un IN pour nettoyer cela, mais ne vous attendez pas à des gains de performance de le faire.

SELECT date 
    FROM `current_daily` 
    WHERE # IN (daily1, daily2, daily3, daily4) 
    ORDER BY date ASC 
+0

IN ne fonctionne pas comme ça. IN est utilisé pour sélectionner une plage de valeurs et non pour sélectionner plusieurs champs. –

+0

Je ne cherche pas vraiment des gains de performance, ce n'est pas un gros projet, je veux juste nettoyer un peu les requêtes, celle que j'utilisais était si maladroite, la vôtre est beaucoup plus simple. Je vais l'utiliser, merci – HaLo2FrEeEk

+1

Pourquoi le vote à la baisse? La requête fonctionne, je l'ai comparée à ma requête actuelle et elle a renvoyé les mêmes résultats exacts, et en moyenne, elle l'a fait quelques millisecondes plus vite. – HaLo2FrEeEk