Используйте 2 подзапроса и UNION
.
1-й получает топ 40, которые упорядочены по ranking
, а 2-й переупорядочивает оставшиеся строки по score
:
SELECT *
FROM tbl_featured_professional
ORDER BY ranking
LIMIT 40
UNION ALL
SELECT * FROM (
SELECT * FROM (
SELECT * FROM tbl_featured_professional
ORDER BY ranking
LIMIT 40, 18446744073709551615
)
ORDER BY score
)
18446744073709551615
= 2^64 - 1
, см. [ 116], это .
Вот то, как я генерирую файл ТЕГОВ для проекта C:
, Который создаст файл ТЕГОВ в текущем каталоге для всех подкаталогов и файлы.
Вот функция emacs, которая делает ту же самую вещь:
(defun compile-tags ()
"compile etags for the current project"
(interactive)
(cd "YOUR_DIRECTORY")
(compile "find . -name \"*.[chCH]\" -print | etags -"))
ПРИМЕЧАНИЕ: если Вы будете на окнах, то необходимо будет установить cygwin и удостовериться c:\cygwin\bin
, находится в пути так, чтобы Вы добрались find
в Вашем пути. Также удостоверьтесь, что emacs каталог bin находится в Вашем пути так, чтобы можно было добраться etags
также.
Почему бы не добавить выполнение ctags к Вашему сценарию сборки? Вам действительно только нужен новый файл тегов, когда Вы компилируете (самое большее). Я склонен просто писать запланированную задачу для создания файла тегов каждую ночь. Кажется, работает вполне прилично.
Я использую комбинацию семантических + гну, глобальная для моей ежедневной работы. Базы данных Global GNU обновляются однажды в день, в то время как семантический используют их для основной навигации и повторно анализируют измененные файлы на лету.
можно найти больше об этих пакетах в моя статья о Cedet
Это могло бы получить Вас близко (непротестированный):
(defvar my-auto-update-tags-alist
(list '("/some/path/to/TAGS" "command_to_build_tags")
'("/another/path/to/TAGS" "another_build_command")))
(defun my-auto-update-tags ()
"Automatically update TAGS files"
(tags-table-check-computed-list)
(let ((filename (buffer-file-name))
build-cmd)
(mapc (lambda (tag-file)
(set-buffer tag-file)
(when (member filename (tags-table-files))
(setq build-cmd (cdr (assoc tag-file my-auto-update-tags-alist)))
(when build-cmd
(call-process build-cmd nil 0))))
tags-table-computed-list)))
(add-hook 'after-save-hook 'my-auto-update-tags)
Это будет только работать (я упоминал, что это не тестируется?) на файлах, которые уже находятся в файлах ТЕГОВ. Если бы Вы добавляете новый файл, необходимо было бы повторно создать файл ТЕГОВ в первый раз сами. Часть обработки вызовов должна работать асинхронно, таким образом, это могли бы быть несколько моментов, пока файл ТЕГОВ на самом деле не восстановлен (если это даже работает ;)
etags-update может помочь в вашем случае. Я не тестировал его, но согласно readme:
etags-update.el - это глобальный второстепенный режим Emacs, который обновляет ваши ТЕГИ при сохранении файла.
Я нашел его на странице Emacswiki для создания файлов TAGS