Вы можете включить или выключить бесшумный режим в .onInit
с помощью SetSilent
, но как только эта функция вернется, режим пользовательского интерфейса изменить нельзя.
Простое решение заключается в том, чтобы просто использовать один из плагинов Banner или Splash в конце вашего последнего Section
для отображения сообщения / изображения.
Или вы можете создать фальшивый бесшумный режим с минимальным пользовательским интерфейсом, который отображает только индикатор выполнения:
!include LogicLib.nsh
Var Silent
Function .onInit
${If} ${Silent}
SetSilent Normal ; Turn off real silent mode
SetAutoClose True
StrCpy $Silent 1 ; Fake silent mode
${EndIf}
FunctionEnd
Page Components SkipPageIfSilent
Page Directory SkipPageIfSilent
Page InstFiles "" TweakInstfilesPage
Function SkipPageIfSilent
IntCmp $Silent 0 +2
Abort
FunctionEnd
Function TweakInstfilesPage
${If} $Silent <> 0
SetSilent Silent ; Make IfSilent return true
FindWindow [110] "#32770" "" $HWNDPARENT
GetDlgItem [110] [110] 0x403 ; Show details button
ShowWindow [110] 0
System::Call 'USER32::GetWindowRect(p[110],@r1)' ; NSIS v3+
System::Call 'USER32::GetWindowRect(p$HWNDPARENT,@r2)' ; NSIS v3+
System::Call '*$1(i,i.r3,i,i)'
System::Call '*$2(i.r5,i.r6,i.r7,ir3r8)'
IntOp $5 $7 - $5 ; Width
IntOp $6 $8 - $6 ; Height
System::Call 'USER32::SetWindowPos(p$HWNDPARENT,p,i,i,ir5,ir6,i0x12)'
SetDetailsView Hide
${EndIf}
FunctionEnd
Section
Sleep 333
Sleep 333
Sleep 333
Sleep 333
SectionEnd
Похоже, вам нужен еще один столбец, такой как «ListOrder». Таким образом, ваша таблица может выглядеть следующим образом:
BookMark ListOrder
======== =========
d 1
g 2
b 3
f 4
a 5
Тогда вы можете «упорядочить» по ListOrder.
Select * from MyTable Order By ListOrder
Если пользователь может перемещать закладку только на одно место за раз, вы можете использовать целые числа в качестве ListOrder и поменять их местами. Например, если пользователь хочет переместить «f» на одну строку вверх:
Update MyTable
Set ListOrder=ListOrder+1
Where ListOrder=(Select ListOrder-1 From MyTable where BookMark='f')
Update MyTable
Set ListOrder=ListOrder-1
Where BookMark='f'
Если пользователь может переместить закладку вверх или вниз на несколько строк одновременно, вам необходимо изменить порядок сегментов. Например, если пользователь хочет переместить «f» в начало списка, вам необходимо:
update MyTable
Set ListOrder=ListOrder+1
where ListOrder>=1 -- The New position
and ListOrder <(Select ListOrder from MyTable where BookMark='f')
update MyTable
Set ListOrder=1 -- The New Position
Where Bookmark='f'
Как уже упоминали другие, не стоит полагаться на физический порядок таблицы базы данных. Реляционные таблицы концептуально больше похожи на неупорядоченные множества, чем упорядоченные списки. Предполагая, что определенный физический порядок может привести к непредсказуемым результатам.
Похоже, вам нужен отдельный столбец, в котором хранится предпочтительный порядок сортировки пользователя. Но вам все равно нужно будет что-то сделать в своем запросе, чтобы отобразить результаты в таком порядке.
Можно указать физический порядок записей в базе данных, создав кластеризованный индекс, но это не то, что вам нужно хочу сделать на произвольной указанной пользователем основе. И это все еще может привести к неожиданным результатам.
Базы данных могут хранить данные любым удобным для них способом. Использование предложения order by - единственный способ , чтобы гарантировать упорядочение данных. В вашем примере закладки вы могли бы иметь целочисленное поле, которое указывает порядок, а затем обновлять это поле, когда пользователь перемещает объекты. Затем закажите этот столбец, чтобы получить все в правильном порядке.
Используйте ORDER BY
в вашем запросе SELECT
. Например, чтобы упорядочить по фамилии пользователя, используйте:
SELECT * FROM User ORDER BY LastName
Полагаю, вам нужен простой заказ на
?
select my_column from my_table order by my_order_column;
Как заявили другие, используйте заказ по.
Никогда не зависите от порядка данных в физической таблице, всегда основывайте его на данных, с которыми вы работаете, будь то одно или несколько ключевых полей.
Порядок строк в фактической базе данных не должен иметь значения.
Вы должны использовать предложение ORDER BY
в своих запросах, чтобы упорядочивать их по мере необходимости.
В ответ на ваше сообщение здесь , вы можете найти ответ:
Чтобы упорядочить в хронологическом порядке, добавьте DateAdded
или подобное столбец с типом данных datetime
или smalldatetime
.
Во всех методах, которые вставляются в базу данных, убедитесь, что вы вставили CURRENT_TIMESTAMP
в DateAdded
column.
В методах, которые запрашивают базу данных, добавьте ORDER BY DateAdded
в конце строки запроса.
НИКОГДА не полагайтесь на физическую позицию в системе базы данных. Он может работать БОЛЬШЕ времени, но определенно не ВСЕ время.
First, let me agree with everyone here that the order in the table shouldn't matter. Use a separate [SortOrder] column that you update and include an Order By clause.
That said, SQL Server databases do allow for a single "clustered index" on a table that will actually force the position in the underlying table storage. Primarily useful if you have a big dataset and always query by something specific.
The question lacks any detail that would let anyone give you correct answer. Clearly you could read the records into memory and then update them. But this is bad on so many different levels.
The issue is like this. Depending on the schema that is actually implemented there is logic to the way that the records are physically written to disk. Sometimes they are written in order of insert and other times they are inserted with space between blocks (see extents).
So changing the physical order is not likely without swapping column data; and this has a deep effect on the various indices. You are left having to change the logical order.
As I read your update... I'm left to understand that you may have multiple users and each user is to have bookmarks that they want ordered. Looks like you need a second table that acts as an intersection between the user and the bookmark. Then all you need is an inner join and an order by.
But there is not enough information to offer a complete solution.
Добавьте столбец position
в свою таблицу и сохраните его как простое целое число.
Если вам нужно поддерживать несколько пользователей или списков, лучше всего создать таблицу закладок, таблицу пользователей и таблицу, чтобы связать их.
id, url
id, name
user_id, bookmark_id, position, date_created
Предполагая, что date_created
заполняется при вставке строк, вы можете получить вторичный порядок списка на основе даты.
select bookmark_id from users_bookmarks where user_id = 1 order by position, date_created;