1

データベースに列を持つテーブルがあります

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

曜日名が今日の日付と一致するかどうかを調べます。一致する場合は結果を返します。そうでない場合は何も表示しません。

その特定の日に値が設定されていない場合、何らかの理由で結果が返されます。

何が問題になる可能性がありますか?

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

曜日の 7 つの列を削除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

あなたのクエリはうまくいきます。列のデータ型に問題がある可能性があります。確認してください。

私の提案は、その目的のために、データベースが最適化されるように 1 つの列のみを使用できるということです。

于 2012-07-10T09:28:49.227 に答える