MySQL вернуться к первой записи, используя LIMIT

0

Предположим, что:

            $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 в этом примере, и, безусловно, первая запись, если мы перемотали бы, будет иметь более низкий идентификатор. В моем сценарии это хорошо.

Спасибо, Джейсон.

  • 0
    Если имеется 100 записей, и вы выбираете только 10 строк (# 90 - # 100), вы хотите получить еще 20 строк (# 1 - # 20) - это правильно?
  • 0
    Абсолютно правильно @danlefree
Теги:
limit

2 ответа

1
Лучший ответ

Если есть 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).

0

Если я понимаю ваш вопрос.
Вы должны использовать LIMIT 0, 30, чтобы получить первые 30 записей, которые соответствуют вашему запросу.

  • 0
    Вы даже не приблизились к пониманию вопроса, к сожалению.
  • 0
    @jeerose Вам нужно пересмотреть формулировку вашего вопроса, потому что трудно определить, что вы имеете в виду.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню