0

私はテーブルKIOSKを持っています

CREATE TABLE IF NOT EXISTS `kiosk` (
  `id` varchar(40) NOT NULL,
  `netId` varchar(40) NOT NULL,
  `name` varchar(255) NOT NULL,
  `countryId` varchar(40) NOT NULL,
  `cityId` varchar(40) NOT NULL,
  `address` varchar(255) NOT NULL,
  `lat` varchar(50) NOT NULL,
  `long` varchar(50) NOT NULL,
  `venue` varchar(255) NOT NULL,
  `impressions` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

とテーブル PLACEMENT

CREATE TABLE IF NOT EXISTS `placement` (
  `id` varchar(40) NOT NULL,
  `userId` varchar(40) NOT NULL,
  `adId` varchar(40) NOT NULL,
  `duration` int(11) NOT NULL,
  `kioskId` varchar(40) NOT NULL,
  `zoneId` varchar(40) NOT NULL,
  `dateBegin` int(11) NOT NULL,
  `dateEnd` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

プレースメントとは、キオスクに広告を掲載することを意味します。各配置には、発行の開始と終了の期間と日付があります。1 つのキオスクで異なる広告の 240 秒のブロックをコンパイルすることが許可されています。このブロックは、日中何度もローテーションされます。

ここで、広告を追加するのに十分な時間がある特定の都市からキオスクを選択する必要があります。

ご覧のとおり、キオスクを選択し、そのキオスクに既に追加されているプレースメントの期間を合計して、テーブルにプレースメント レコードを追加できるかどうかを確認する必要があります。

私は次のようなものを試しました

SELECT *, SUM(`placement`.`duration`) AS `d`
FROM `kiosk`
LEFT OUTER JOIN `placement` ON ((`cityId` = 'bac3d991-d13c-49c2-8563-8f974c75f6b9')
AND (`placement`.`kioskId` = `kiosk`.`id`)
AND ((`placement`.`dateBegin` BETWEEN 1333929600 AND 1333929600))
OR (`placement`.`dateEnd` BETWEEN 1333929600 AND 1333929600)))
GROUP BY `kiosk`.`id`
HAVING `d` <=225
OR `d` IS NULL

ここで、225 はブロック内で使用可能な秒数です (この例では 15 秒の広告を配置したい)。このキオスクの配置レコードがない場合dは、NULL であることを確認します。

すべてのキオスクのリストを受け取ったので、cityId やそれにリンクされているプレースメントが何であるかはわからないので、私はすべて間違っているようです。

どんな助けにも感謝します

4

1 に答える 1

1

クエリを次のように変更します

SELECT *, SUM(`placement`.`duration`) AS `d`
FROM `kiosk`
LEFT OUTER JOIN `placement` ON (`kiosk`.`id` = `placement`.`kioskId`)
WHERE ((`cityId` = 'bac3d991-d13c-49c2-8563-8f974c75f6b9')
AND ((`placement`.`dateBegin` BETWEEN 1333929600 AND 1333929600))
OR (`placement`.`dateEnd` BETWEEN 1333929600 AND 1333929600)))
GROUP BY `kiosk`.`id`
HAVING `d` <=225
OR `d` IS NULL
于 2012-04-09T15:20:14.773 に答える