所以我有一张日志源表:
CREATE TABLE logSources (
ID INT UNSIGNED NOT NULL AUTO_INCREMENT,
name VARCHAR(255) NOT NULL DEFAULT '',
) ENGINE=InnoDB;
以及每个日志源的日志条目之一:
CREATE TABLE logEntries (
ID BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
logSourceID INT UNSIGNED NOT NULL DEFAULT '0',
FOREIGN KEY (logSourceID) REFERENCES logSources (ID) ON DELETE CASCADE,
timestamp INT(32) UNSIGNED NOT NULL DEFAULT '0',
logMessage TEXT,
PRIMARY KEY (ID),
KEY logSourceIDThenTimestamp (logSourceID, timestamp)
) ENGINE=InnoDB;
假设我有80,000个logSource和一个时间t
,我想创建一个SELECT
语句,该语句可以给我80,000个logEntries。对于每个logSource,我希望最新的logEntry早于t
。
因此对于单个logSource,选择将为:
SELECT *
FROM logEntries
WHERE logSourceID = ?
AND timestamp < ?
ORDER BY timestamp DESC
LIMIT 1
每个logEntries都是完全独立的。我什至不知道从哪里开始写这样的选择。
执行SELECT
80,000次很容易;-)但是如何在一个SELECT
中执行一次呢?