2012-07-10 59 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

你的查询工作正常。可能是问题出在你的数据类型的列上,请检查一下。

我的建议是,为此目的,您只能使用一列,以便优化数据库。