Предположим, что:
$sql = " SELECT * FROM `artwork` WHERE approved = '1' ";
if($filter) $sql .= " AND $filter = '$filter_value' ";
$sql .= " ORDER BY subdate DESC, id DESC
LIMIT 30,30";
Если бы я представил начальную точку (например, WHERE id > 50
), и это условие повлияло на мой LIMIT
так, что оно вернуло только 10 результатов. Я хочу 30 результатов, помните. Есть ли способ начать с записи 1 и продолжить выбор?
edit: Я понимаю, что я просил идентификатоp > 50 в этом примере, и, безусловно, первая запись, если мы перемотали бы, будет иметь более низкий идентификатор. В моем сценарии это хорошо.
Спасибо, Джейсон.
Если есть 100 записей, и вы только выбрав 10 строк (# 90 - # 100), вы хотите получить еще 20 строк (# 1 - # 20)
Если это ваши ограничения, я не думаю, что вы сможете получить желаемый набор результатов из одного запроса.
Здесь хранится процедура, которая создает временную таблицу для получения желаемого результата:
DELIMITER //
DROP PROCEDURE IF EXISTS TMP_TABLE_ARTWORK//
CREATE PROCEDURE TMP_TABLE_ARTWORK (_offset INT, _count INT)
BEGIN
DECLARE res_total INT DEFAULT 0;
SELECT COUNT(*) INTO res_total FROM artwork;
CREATE TEMPORARY TABLE IF NOT EXISTS artwork_tmp ( t_pseudo INT, t_old INT, t_subdate DATETIME );
INSERT INTO artwork_tmp ( t_pseudo, t_old, t_subdate ) SELECT artwork.id, artwork.id, artwork.subdate FROM artwork ORDER BY artwork.subdate DESC;
INSERT INTO artwork_tmp ( t_pseudo, t_old, t_subdate ) SELECT ( artwork.id + res_total ), artwork.id, artwork.subdate FROM artwork ORDER BY artwork.subdate DESC;
PREPARE STMT FROM "SELECT * FROM artwork_tmp ORDER BY t_pseudo LIMIT ?,?";
SET @offset = _offset;
SET @count = _count;
EXECUTE STMT USING @offset, @count;
DROP TABLE artwork_tmp;
END //
DELIMITER ;
Вам, вероятно, потребуется изменить его, чтобы заставить его делать то, что вы хотите (и, видимо, готовый оператор обходного пути больше не требуется, если вы используете более новую версию MySQL).
Если я понимаю ваш вопрос.
Вы должны использовать LIMIT 0, 30, чтобы получить первые 30 записей, которые соответствуют вашему запросу.