MYSQL DAYNAME()问题

时间:2012-07-10 08:37:17

标签: php mysql

我在数据库中有一个包含列

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

这些值的值为0或星期一,星期二,星期三,星期四等,具体取决于当天。

在我的选择语句中我正在使用

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

查明日期名称是否与今天匹配,如果是,则返回结果,否则不会显示任何内容。

由于某种原因,当我没有为特定日期设置任何值时,它会返回结果。

知道可能是什么问题吗?

3 个答案:

答案 0 :(得分: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'";

这种格式看起来有些混乱,或者我只是得到了错误的结局。

希望有所帮助。

答案 1 :(得分: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())

答案 2 :(得分:0)

您的查询运行正常。可能有问题的是您的数据类型列请检查。

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