[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Вытащить одним запросом последние три записи и...
Страницы: 1, 2
N0ob
Вытащит одним запросом последние три записи и общее количество всех записей из этой таблицы. Собственно как это сделать?
AllesKlar
Например так
select top 3 (select count(*) from table_name), * from table_name order by id desc

Это Trnasact Sql, на mysql сам переделай с limit
Ну, и при желании оптимизируй :)
Хотя, у меня использование подзапроса дало всего 10мс дополнительных затрат. В таблице 101023 записей. Думаю, не критично.

_____________
[продано копирайтерам]
Kusss
SELECT 
id,
(
SELECT COUNT( id ) FROM `table`) AS count
FROM
`table`
ORDER BY
id DESC
LIMIT

0, 3
twin
Вообще это не один запрос, а 4 получается. Вложенный будет выполняться для каждой строки.


_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
AllesKlar
Цитата (twin @ 3.12.2014 - 00:20)
Вообще это не один запрос, а 4 получается. Вложенный будет выполняться для каждой строки.

Не буду утвержать на 100%, но думаю, что подзапрос после первого раза закешируется.


_____________
[продано копирайтерам]
inpost
AllesKlar
Myisam количество записей хранит отдельно, отсюда обращаться должен именно к этим данным.
В свою очередь Innodb будет отдельный поиск.
Между двумя подряд идущими запросами и подзапросом, если не ошибаюсь, разницы никакой в области хранения кеша.

Kusss
А зачем тебе подзапрос? Почему не сделать 2 отдельных запроса идущих подряд? В таком случае ты будешь уверен, что не будет затрачены ресурсы на временную таблицу для подзапросов.
Ну а про 4 тебе уже выше сказали.

N0ob
Делай 2 отдельных. Подзапросы зачастую медленнее работают в mysql, и ты лишь навредишь производительности.

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
Kusss
inpost
ТС написал ОДНИМ запросом.
AllesKlar
Цитата (Kusss @ 3.12.2014 - 01:16)
inpost
ТС написал ОДНИМ запросом.

ТС ошибся в своем желании biggrin.gif
Главный принцип программирования какой? Убедить клиента, что лучше будет не так, как он хочет, а как удобнее программисту smile.gif

_____________
[продано копирайтерам]
sergeiss
Учитывая то, что не была задана БД, то можно предположить, что можно Постгре использовать...

Тогда мое решение:
WITH
top3 as
(select * from table_name order by id desc limit 3),
count_all as
(select count(*) as c from table_name)

select *, (select c from count_all) as count_records
from top3
order by id

ОДНИМ запросом выбираем 3 записи, считаем общее количество записей в таблице (гарантированно только один раз будет подсчет сделан). А в итоге еще и в порядке возрастания сортируем.

PS. Переместил тему из "Администрирования БД" в "PHP + SQL".

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
twin
Подсчет то один, а запроса все равно четыре)))

Полюбому двумя разными круче выходит.

_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
sergeiss
Цитата (twin @ 3.12.2014 - 05:24)
Подсчет то один, а запроса все равно четыре)))

Если ты про мой код, то покажи там 4 запроса? Там один запрос с подзапросами, вообще-то smile.gif

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
twin
А подзапрос не запрос чтоли?

_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
AllesKlar
Цитата (twin @ 3.12.2014 - 06:14)
А подзапрос не запрос чтоли?

Смотря что считать запросом.
Запрос сервера к базе или или запрос СУБД к базе.

_____________
[продано копирайтерам]
twin
А и то и другое нужно считать запросом. Запрос - это обращение за данными. И не важно, где они находятся, на другом сервере, в ФС или кэше. Но так, как запрос к СУБД неизбежен, его можно не считать.

А принято считать как раз его, так как все, что внутри ошибочно принимается за один запрос. Задача одним запросом не решается в принципе. И тут нужно смотреть, чему отдать предпочтение. И лучше не гадать на кофейной гуще, а сделать бенчи.

Особенно если что-то не договаривается. К примеру в запросе есть WHERE. Так что заявлять однозначно, что подзапрос - не запрос, нельзя. Особенно так категорично:
Цитата
ОДНИМ запросом выбираем 3 записи, считаем общее количество записей в таблице (гарантированно только один раз будет подсчет сделан).
Там 4 запроса, не считая межсерверный. И нечево пудрить мозги. smile.gif

_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
AllesKlar
twin
Вот этим и отличается инженер от математика.
Инженер возьмет и сделает, а математик вытрахает мозг, причем без гарантии, что будет что-то сделано вообще smile.gif

_____________
[продано копирайтерам]
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.