1

列として月と年を持つ列があります..列から範囲を選択する必要があります..2 つの範囲では機能しないようです。

テーブル

CREATE TABLE `sampletable` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `AccountId` int(11) unsigned NOT NULL,
  `CampaignId` int(11) unsigned NOT NULL,
  `CampaignName` varchar(115) NOT NULL DEFAULT '',
  `Sent` int(11) unsigned NOT NULL,
  `Month` int(11) unsigned NOT NULL,
  `Year` int(11) unsigned NOT NULL,
  `LocationId` int(11) unsigned NOT NULL,
  PRIMARY KEY (`id`),
  KEY `AccountId_idx` (`AccountId`),
  KEY `monthy_year_idx` (`Month`,`Year`),
  KEY `locationid_idx` (`LocationId`)
) ENGINE=MyISAM AUTO_INCREMENT=1584

選択ステートメント:

SELECT * FROM sampletable
WHERE AccountId = 1 
and (`Month` >= 10 AND `Year` = 2012)
and (`Month` <= 2 AND `Year` = 2013)
ORDER BY Year asc, month asc

これはうまくいかないようです。

これらを日付形式に変換して使用する必要がありますか?

4

4 に答える 4

5

あなたがしていることは、「同時に左右に行こうとする」ことに似ています。

WHERE条項を破りましょう。

MySQLあなたは行を取得するように言っています

  1. Year = 2012 AND Year = 2013

  2. Month >= 10 AND Month <= 2

これは決して真実ではありません。

あなたのWHERE句は次のようになります-

WHERE AccountId = 1 
and ((`Month` >= 10 AND `Year` = 2012)
OR (`Month` <= 2 AND `Year` = 2013))
于 2013-01-24T14:25:40.470 に答える
1
 and (     
  (`Month` >= 10 AND `Year` = 2012)
 or (`Month` <= 2 AND `Year` = 2013))
于 2013-01-24T14:24:33.673 に答える
1

条件を括弧で囲んで使用するOR

SELECT ...
FROM ...
WHERE AccountId = 1  AND   
      ((`Month` >= 10 AND `Year` = 2012) OR  (`Month` <= 2 AND `Year` = 2013) )
于 2013-01-24T14:25:15.477 に答える