2011-03-31 98 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