Показ Oracle Pagination Queries в CakePHP 1.2

0

При использовании разбивки на страницы в CakePHP, как работают запросы? Это:

a) Запросить весь набор записей и отобразить только записи, заданные параметрами разбивки на страницы?

b) Запросить только подмножество записей на основе настроек разбивки на страницы?

Я хочу избежать запроса на миллионы записей, если он не использует параметр "b". Я много часов искал в Интернете, и ничего не могу найти.

Если это опция "a", знаете ли вы какие-либо настройки, которые преобразуют разбиение на страницы на параметр "b"? Я работаю с Oracle, поэтому стандартный

SELECT * FROM `table`
LIMIT 60 , 30

не работает в Oracle, как в MySQL. Но я могу легко преобразовать образец MySQL в Oracle по мере необходимости.

UPDATE: он, по-видимому, правильно ограничивает данные, но я не вижу запроса, чтобы точно знать, что это такое. Когда я повторяю результаты в файле dbo_source.php, он возвращает только количество записей, определяемых префиксом разбиения на страницы. Странно, что он не будет отображать фактический запрос, используемый для разбивки на страницы. Может ли быть установкой оракула, которую они передают, прежде чем запрос будет сделан?

Теги:
pagination
cakephp-1.2

3 ответа

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

Лучшее решение, которое я нашел до сих пор, это: CakePHP - выполнить последний запрос

Он может быть встроен прямо в структуру с помощью app_model.php и обеспечивает доступ к любой модели, просто называя ее.

2

Существует несколько способов увидеть, какие запросы фактически выполняются.

Первый способ - включить ведение mysql из самого mysql. Пока вы используете только сервер, он должен быть совершенно достаточным.

Второй способ - отредактировать файл dbo_ * в вашей установке на торте и добавить несколько строк для регистрации запросов к файлу. Это можно сделать, открыв файл dbo_mysql.php. Он расположен:

жмых/ЛИЭС/модель/источники данных/ДБО/dbo_mysql.php

Найдите функцию _execute ($ sql). Все, что вы делаете, это добавить строку или 3 php-кода для вывода $sql в файл queries.log.

Затем, чтобы увидеть ваши текущие запросы, откройте терминал и запустите tail -f queries.log(используя mac или linux).

Это отличный способ увидеть, какие запросы выполняются, и отличный способ оптимизировать ваш код. Также, если вам интересно, просто просмотрите файлы dbo_ *, чтобы увидеть, как выполняется oracle по сравнению с mysql и т.д.

  • 0
    Спасибо за предложения. Я посмотрю на это. Мне очень нравится идея DBO, поскольку она будет подавать необработанный запрос во время его выполнения на сервере. Это будет очень полезно! Спасибо!
  • 0
    Я попробовал это, добавив echo 'ORACLE:'. $ Sql; сразу после оператора _execute. Нет ограничения по нумерации. Он выполняет весь запрос. Может быть, это было обновлено в v1.3. Но что касается 1.2, то, похоже, Oracle DBO не ограничивает запрос на нумерацию страниц. Есть другие идеи?
1

form mysql

cake делает поиск с ограничением и смещением. поэтому он получит только то, что вы положили в "лимит". Значение по умолчанию - это примерно 20

первой страницей будет лимит 20, 0, затем 20, 20, затем 20, 40 или что-то в этом роде.

для оракула, я не уверен. это будет что-то подобное, хотя.

  • 0
    Вы знаете, как отобразить запрос в отладке, чтобы я мог это подтвердить? Единственный запрос, который я вижу, это SELECT * FROM ..., который указывает, что он вытягивает ВСЕ записи.
  • 0
    торт не выбрать * по умолчанию, вставьте код
Показать ещё 4 комментария

Ещё вопросы

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