2011-03-31 97 views
2

我正在建立一个跟踪视频游戏日常挑战的系统。每日挑战4次,每周挑战1次。每个挑战都会被保存到一个带有id的表格中,这个表格可以被重复使用,挑战重复使用(大约22%的时间)。我有另一张桌子来存储每一天的挑战,它看起来像这样:帮助简化这个MySQL查询

date | daily1 | daily2 | daily3 | daily4 |到期

由于挑战被重复使用,我希望能够通过其ID来查找使用挑战的其他日子。我现在使用此查询:

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

它可以工作,但它太笨重了。我试图找到更好的是运行此查询,所以我不需要所有的OR,但由于它从多个列获取信息,它看起来不像我可以使用IN()。有没有另外一种方法可以简化这个查询并获得相同的信息?

+1

我不认为你可以简单地通过你的SQL而不用重构你的表。 – 2011-03-31 15:17:37

回答

0

可能使用一个IN来清理它,但不要指望这样做会有任何性能提升。

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

IN不能像这样工作。 IN用于选择一系列值,而不是跨多个字段进行选择。 – 2011-03-31 15:39:08

+0

我并不是在寻找性能上的提升,这不是一个庞大的项目,我只是想清理一下这些查询,我使用的那个很笨重,你的要简单得多。我会用它,谢谢 – HaLo2FrEeEk 2011-03-31 15:39:09

+1

为什么要投票?查询起作用了,我将它与我当前的查询进行了比较,它返回了相同的确切结果,平均而言,它的速度提高了几毫秒。 – HaLo2FrEeEk 2011-03-31 15:45:13