2012-07-10 23 views
1

我有一個數據庫表中的列MYSQL DAYNAME()問題

d_monday, d_tuesday, d_wednesday, d_thursday, d_friday, d_saturday, d_sunday 

的值,這些都是0或週一,週二,週三,週四等根據一天。

在我的SELECT語句中我使用

SELECT * from DEALS WHERE d_monday=DAYNAME(NOW()) OR d_tuesday=DAYNAME(NOW()) 

找出一天的名稱是否與今天一天相匹配,如果是的話那麼它返回的結果,否則不顯示任何內容。

由於某些原因,當我沒有爲該特定日期設置任何值時,它會返回結果。

任何想法可能是什麼問題?

+1

爲什麼你不使用日期時間字段?爲什麼這麼複雜? – Stony 2012-07-10 08:38:53

+0

我嘗試過日期時間字段,雖然我不需要它與週一至週日的特定時間有關。 – Adam 2012-07-10 08:42:25

+0

你必須在'WHERE'中寫出8個條件......你聽說過''optimization''和'normalizaion'這個詞嗎? – diEcho 2012-07-10 08:42:46

回答

0

我會被誘惑使用PHP字符串

$day = "d_". date('l'); //lowercase L is full day name 
$SQL = "SELECT $day FROM DEALS WHERE [...]"; 

我猜測一下,但這樣豈不帶你在正確的方向挑場?

或者像這樣

$day = date('l'); //lowercase L is full day name 
$SQL = "SELECT * from DEALS WHERE d_monday='$day' OR d_tuesday='$day' "; 

在我看來,你可能想

$day = date('l'); //lowercase L is full day name 
$SQL = "SELECT * from DEALS WHERE d_$day='$day'"; 

格式似乎有點混亂,而也許我剛剛得到了棍子的錯誤結束。

希望有所幫助。

0

考慮刪除你的七列一週的日子,並添加一個單獨的表DealDays有一個外鍵引用Deals

CREATE TABLE DealDays (
    DealDayID int NOT NULL, 
    DealID int NOT NULL, 
    DayName varchar(10) NOT NULL, /* or, perhaps, enum ('Sunday', 'Monday', …) */ 
    PRIMARY KEY (DealDayID), 
    FOREIGN KEY (DealID) REFERENCING Dels (DealID), /* or whatever is Deal PK's name */ 
    UNIQUE (DealID, DayName) /* to make sure you can't add the same day twice per deal */ 
); 

那麼你就能夠找到交易對本的日子裏, :

SELECT 
    d.DealID, 
    d.whatever, 
    … 
FROM Deals d 
INNER JOIN DealDays dd ON d.DealID = dd.DealID 
WHERE dd.DayName = DAYNAME(NOW()) 
0

你的查詢工作正常。可能是問題出在你的數據類型的列上,請檢查一下。

我的建議是,爲此目的,您只能使用一列,以便優化數據庫。