1

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

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()) 

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

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

知道可能是什么问题吗?

4

3 回答 3

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'";

格式似乎有点混乱,或者我只是弄错了。

希望有帮助。

于 2012-07-10T09:05:56.610 回答
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())
于 2012-07-10T09:28:33.107 回答
0

您的查询工作正常。可能问题出在您的列数据类型中,请检查。

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

于 2012-07-10T09:28:49.227 回答