Как я выбираю последние 5 строк в таблице без сортировки?

Если вы активировали Multisite в WordPress 3.5 или более поздней версии, вы можете выполнить настройку документации в разделе .htaccess and Mod Rewrite

Согласно документации:

[114 ] .htaccess и Mod Rewrite В отличие от WordPress с одним сайтом, который может работать с «уродливыми» постоянными ссылками и, следовательно, не требует Mod Rewrite, MultiSite требует его использования для форматирования URL-адресов для ваших дочерних сайтов. Это требует использования файла .htaccess, формат которого будет немного отличаться, если вы используете SubFolders или SubDomains. Приведенные ниже примеры - это стандартные записи .htaccess для вложенных папок и поддоменов WordPress, когда WordPress установлен в корневой папке вашего сайта. Если у вас есть WordPress в его собственной папке, вам нужно соответствующим образом изменить значение для RewriteBase.

BLOCKQUOTE>

25
задан Mitch Wheat 22 November 2008 в 08:21
поделиться

9 ответов

Существует удобный прием, который работает в некоторых базах данных на упорядочивание в порядке базы данных,

ВЫБОР * ОТ ORDER BY TableName, верного

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

1
ответ дан 28 November 2019 в 17:38
поделиться

Можно получить их из памяти.
Поэтому сначала Вы получаете строки в DataSet, и затем вытаскиваете последние 5 из DataSet.

1
ответ дан 28 November 2019 в 17:38
поделиться

Если Вы знаете, сколькими строки там будут всего, можно использовать ROW_NUMBER () функция. Вот экс-иноходь из MSDN ( http://msdn.microsoft.com/en-us/library/ms186734.aspx )

USE AdventureWorks;
GO
WITH OrderedOrders AS
(
    SELECT SalesOrderID, OrderDate,
    ROW_NUMBER() OVER (ORDER BY OrderDate) AS 'RowNumber'
    FROM Sales.SalesOrderHeader 
) 
SELECT * 
FROM OrderedOrders 
WHERE RowNumber BETWEEN 50 AND 60;
2
ответ дан 28 November 2019 в 17:38
поделиться

Ну, "последние пять строк" являются на самом деле последними пятью строками в зависимости от Вашего кластерного индекса. Ваш кластерный индекс, по определению, является способом, которым он располагает в ряд, заказаны. Таким образом, Вы действительно не можете получить "последние пять строк" без некоторого порядка. Можно, однако, получить последние пять строк, поскольку это принадлежит кластерному индексу.

SELECT TOP 5 * FROM MyTable
ORDER BY MyCLusteredIndexColumn1, MyCLusteredIndexColumnq, ..., MyCLusteredIndexColumnN DESC
3
ответ дан 28 November 2019 в 17:38
поделиться

Без порядка это невозможно. Что определяет "нижнюю часть"? Следующее выберет 5 строк согласно тому, как они хранятся в базе данных.

SELECT TOP 5 * FROM [TableName]

3
ответ дан 28 November 2019 в 17:38
поделиться

Путем Ваш вопрос формулируется, заставляет его казаться, что Вы думаете, что необходимо физически обратиться данные в таблице для возвращения его в порядке, который Вы хотите. Если так, дело обстоит не так пункт ORDER BY существует с этой целью. Физический порядок, в котором хранятся записи, остается неизменным при использовании ORDER BY. Записи отсортированы в памяти (или во временном дисковом пространстве), прежде чем они будут возвращены.

Примечание, которое порядок, который возвращаются записи, не гарантируется, не используя пункт ORDER BY. Так, в то время как любой из предложения здесь могут работать, нет никакой причины думать, что они продолжат работать, и при этом Вы не можете доказать, что они работают во всех случаях с Вашей текущей базой данных. Это дизайном - я предполагаю, что он должен дать механизм базы данных, который делает свобода, поскольку он будет с записями для получения лучшей производительности в случае, где нет никакого явного определенного порядка.

Принятие Вы хотели последние 5 записей, отсортированных по имени поля в порядке возрастания, Вы могли сделать что-то вроде этого, которое должно работать в любом SQL 2000 или 2005:

select Name 
from (
    select top 5 Name 
    from MyTable 
    order by Name desc
) a 
order by Name asc
10
ответ дан 28 November 2019 в 17:38
поделиться

Предположим, что у Вас есть индекс на идентификаторе, это будет молнией быстро:

SELECT * FROM [MyTable] WHERE [id] > (SELECT MAX([id]) - 5 FROM [MyTable])
29
ответ дан 28 November 2019 в 17:38
поделиться

Это - примерно самый причудливый запрос, который я когда-либо писал, но я вполне уверен, это получает "последние 5" строк от таблицы без упорядочивания:

select * 
from issues
where issueid not in (
    select top (
        (select count(*) from issues) - 5
    ) issueid
    from issues
)

Примечание, что это использует способность 2005 SQL Server передать значение в "главный" пункт - это не работает над SQL Server 2000.

34
ответ дан 28 November 2019 в 17:38
поделиться
select * 
from table 
order by empno(primary key) desc 
fetch first 5 rows only
1
ответ дан 28 November 2019 в 17:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: