SA-MP Forums

Go Back   SA-MP Forums > Non-English > Languages > Русский/Russian

Reply
 
Thread Tools Display Modes
Old 14/01/2019, 08:47 PM   #1
Mexanizm93
Big Clucker
 
Mexanizm93's Avatar
 
Join Date: Jan 2013
Location: Russia. Voronezh
Posts: 173
Reputation: 6
Question Выборка из бд mysql в заданном направлении

Здравствуйте уважаемые форумчане.
Меня интересует один вопрос, а именно возможно ли указать SELECT в каком направлении выбирать значения ?

К примеру:

Есть числа и они могут быть постоянно разные.
Запрашиваю из бд я их в порядке ORDER BY id числа DESC

20
19
18
17
..
1

и нужно например запросить у бд 5 чисел после 14 по возрастанию, то есть 14,15,16,17,18.

Вопрос - как это сделать ?
Буду заранее благодарен.
__________________
We do not drink vodka every day and do not play the balalaika you think about us. ^_^ © Mexanizm
Mexanizm93 is offline   Reply With Quote
Old 14/01/2019, 09:33 PM   #2
Stepashka
Godfather
 
Stepashka's Avatar
 
Join Date: Jul 2008
Location: near PC
Posts: 5,471
Reputation: 138
Default Re: Выборка из бд mysql в заданном направлении

Code:
... WHERE id > 13 ORDER BY id ASC
__________________
Клятва Страуструпа: "Я обязуюсь прилежно комментировать свой код, не использовать goto и следить за состоянием своих потоков и выделяемой памяти. Я обязуюсь не оставлять мусора в системе и избегать однобуквенных переменных. Ресет." © Куч
M&M GM
Status: ON HOLD

Stepashka is offline   Reply With Quote
Old 15/01/2019, 07:39 PM   #3
Mexanizm93
Big Clucker
 
Mexanizm93's Avatar
 
Join Date: Jan 2013
Location: Russia. Voronezh
Posts: 173
Reputation: 6
Default Re: Выборка из бд mysql в заданном направлении

Quote:
Originally Posted by Stepashka View Post
Code:
... WHERE id > 13 ORDER BY id ASC
Большое спасибо за помощь, но не много не то, что я хотел, хотя близко. Я забыл указать, что нужно выбрать данные отсортировав их именно DESC порядком.
Я составил вложенный запрос на выборку. Теоретически вложенный запрос должен с начало отсортировать в ASC порядке числа и затем главный запрос их должен перевернуть(отсортировать) и показать в DESC с помощью перечисления в IN. Запрос даёт результат выборки от самого большого числа inc_ids в таблице до маленького. Я гуглил, но не нагуглил ничего толкового.

PHP Code:
SELECT inc_ids\
                    
FROM player_notice \
                    
WHERE \
                    `
player_idx` = '1' AND inc_ids IN \
                        (
SELECT inc_ids \
                            
FROM player_notice \
                            
WHERE `player_idx` = '1' AND inc_ids >= '14' \
                            
ORDER BY inc_ids ASC) \
                    
ORDER BY inc_ids DESC \
                    
LIMIT 5 
Должны вывестись столбцы 14 по 18 и быть отсортированы по убыванию.
Грубо говоря я должен получить результат вложенного запроса в IN такого рода IN(14,15,16,17,1


UPD
Разбил запрос на два отдельных и получил нужный результат, но это не выход. Прыжки по функциям. Методом pawn загнал в IN полученные значения.
__________________
We do not drink vodka every day and do not play the balalaika you think about us. ^_^ © Mexanizm

Last edited by Mexanizm93; 15/01/2019 at 08:42 PM.
Mexanizm93 is offline   Reply With Quote
Old 16/01/2019, 06:22 AM   #4
Eims
Huge Clucker
 
Eims's Avatar
 
Join Date: May 2013
Location: Восточный Мордор
Posts: 453
Reputation: 15
Default Re: Выборка из бд mysql в заданном направлении

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

Хотя если задачей является "развернуть" результат, то что мешает сделать это прямо во время его обработки? То бишь:
PHP Code:
new i;
cache_get_row_count(i);
for(
-= 1!= -1i--)
{
    ...

__________________
- How many IT Engineers does it take to fix a broken light bulb?
- None, the light bulb works fine in my office, I cannot replicate the issue.
Eims is offline   Reply With Quote
Old 16/01/2019, 07:28 AM   #5
Stepashka
Godfather
 
Stepashka's Avatar
 
Join Date: Jul 2008
Location: near PC
Posts: 5,471
Reputation: 138
Default Re: Выборка из бд mysql в заданном направлении

Code:
... WHERE id > 13 ORDER BY id DESC
Code:
SELECT inc_ids\ 
FROM player_notice \ 
WHERE \ 
player_idx=1 AND inc_ids >= 14 \ 
ORDER BY inc_ids DESC \ 
LIMIT 5
__________________
Клятва Страуструпа: "Я обязуюсь прилежно комментировать свой код, не использовать goto и следить за состоянием своих потоков и выделяемой памяти. Я обязуюсь не оставлять мусора в системе и избегать однобуквенных переменных. Ресет." © Куч
M&M GM
Status: ON HOLD

Stepashka is offline   Reply With Quote
Old 17/01/2019, 05:07 AM   #6
Mexanizm93
Big Clucker
 
Mexanizm93's Avatar
 
Join Date: Jan 2013
Location: Russia. Voronezh
Posts: 173
Reputation: 6
Default Re: Выборка из бд mysql в заданном направлении

Quote:
Originally Posted by Eims View Post
Стоило озвучить то, какие данные у тебя есть и что ты хочешь добиться в результате запроса. Вполне возможно, что есть более оптимальный вариант.

Хотя если задачей является "развернуть" результат, то что мешает сделать это прямо во время его обработки? То бишь:
PHP Code:
new i;
cache_get_row_count(i);
for(
-= 1!= -1i--)
{
    ...

Привет Еймс, да, ты прав. Спасибо за ответ. Я пытаюсь сделать банальное постраничное листание. Звучит банально, но в реализацию кнопки "Назад" я никак не мог въехать. Кнопку "Далее "я получал методом выборки последнего полученного индекса ... WHERE id < last_index ORDER BY last_index DESC, а вот с "Назад" такая практика не проходила. Запрос WHERE id > first_index ORDER BY first_index DESC ясное дело выводил от максимального числа в таблице, что не нарушало по идее заданное условие, но не совпадало с тем, что хотел я. Говоря конкретно я дико ступил.
first_index получен первым результатом на странице. last_index соответственно последним. Как рамки для вывода результата. Получать от и до.

Про переворот результата в коде я догадывался, но хотелось возложить эту задача на БД.
Щас сотру весь этот бред в коде и напишу по новой.


UPD:

Сделал с помощью LIMIT отступ и сколько элементов выводить, но есть вопрос. Чем больше записей в таблице, тем большее время бд будет затрачивать на отступ. Выход ли делать подобное через LIMIT ?

Цитата:

Quote:
Выборки со смещением (LIMIT/OFFSET) могут работать очень медленно при больших значениях смещений. Это происходит по причине того, что MySQL перебирает и отбрасывает все строки результата, пока их количество не будет равно значению OFFSET. Например:

SELECT * FROM articles ORDER BY id LIMIT 20000, 20
Такой запрос будет использоваться для показа 1000й страницы статей (по 20 статей на страницу). В таком случае, MySQL переберет и отбросит 20 тыс. записей до того, как вернет 20 нужных нам. Естественно, с ростом номера страницы, запрос будет работать все медленнее.
__________________
We do not drink vodka every day and do not play the balalaika you think about us. ^_^ © Mexanizm

Last edited by Mexanizm93; 17/01/2019 at 06:06 AM.
Mexanizm93 is offline   Reply With Quote
Old 17/01/2019, 12:17 PM   #7
Eims
Huge Clucker
 
Eims's Avatar
 
Join Date: May 2013
Location: Восточный Мордор
Posts: 453
Reputation: 15
Default Re: Выборка из бд mysql в заданном направлении

Привет.
А что вообще за таблица и сколько в записей планируется?
Просто гораздо проще было бы выгрузить с базы сразу максимальное количество столбцов, а после уже работать с кэшем, чем каждый раз запросами терроризировать БД.
__________________
- How many IT Engineers does it take to fix a broken light bulb?
- None, the light bulb works fine in my office, I cannot replicate the issue.
Eims is offline   Reply With Quote
Old 17/01/2019, 12:40 PM   #8
Mexanizm93
Big Clucker
 
Mexanizm93's Avatar
 
Join Date: Jan 2013
Location: Russia. Voronezh
Posts: 173
Reputation: 6
Default Re: Выборка из бд mysql в заданном направлении

Quote:
Originally Posted by Eims View Post
Привет.
А что вообще за таблица и сколько в записей планируется?
Просто гораздо проще было бы выгрузить с базы сразу максимальное количество столбцов, а после уже работать с кэшем, чем каждый раз запросами терроризировать БД.
Записей планируется много. Таблица с оповещениями для игроков. В одной таблице оповещения для разных игроков. Содержание: дата прихода оповещения, оглавление, текст.
__________________
We do not drink vodka every day and do not play the balalaika you think about us. ^_^ © Mexanizm
Mexanizm93 is offline   Reply With Quote
Old 19/01/2019, 05:18 PM   #9
Mexanizm93
Big Clucker
 
Mexanizm93's Avatar
 
Join Date: Jan 2013
Location: Russia. Voronezh
Posts: 173
Reputation: 6
Default Re: Выборка из бд mysql в заданном направлении

Подниму. Сейчас меня интересует вопрос на сколько затратно будет использование LIMIT в подобном случае ?

Заранее спасибо. Степашка, так как ты хорошо разбираешься в субд, то желательно хотелось бы и твоё мнение выслушать.
__________________
We do not drink vodka every day and do not play the balalaika you think about us. ^_^ © Mexanizm
Mexanizm93 is offline   Reply With Quote
Old 20/01/2019, 06:19 AM   #10
Stepashka
Godfather
 
Stepashka's Avatar
 
Join Date: Jul 2008
Location: near PC
Posts: 5,471
Reputation: 138
Default Re: Выборка из бд mysql в заданном направлении

Quote:
Originally Posted by Mexanizm93 View Post
Подниму. Сейчас меня интересует вопрос на сколько затратно будет использование LIMIT в подобном случае ?

Заранее спасибо. Степашка, так как ты хорошо разбираешься в субд, то желательно хотелось бы и твоё мнение выслушать.
Разница в скорости будет ощутима только в пределах десятка миллионов записей в выборке.
__________________
Клятва Страуструпа: "Я обязуюсь прилежно комментировать свой код, не использовать goto и следить за состоянием своих потоков и выделяемой памяти. Я обязуюсь не оставлять мусора в системе и избегать однобуквенных переменных. Ресет." © Куч
M&M GM
Status: ON HOLD

Stepashka is offline   Reply With Quote
Reply

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
MySQL Plugin r39-2 Error: Can't connect to local MySQL server through socket Emre__ Scripting Help 10 30/07/2014 09:26 AM
[Tutorial] [VIDEO] MySQL ORM r38: How to pair GM with MySQL & creation of registration/connection system cArnasLT Tutorials 3 19/05/2014 03:08 PM
BlueG MySQL plugin - Failed (plugins/mysql.so: undefined symbol: _Z13stringvprintfPKcPc) linuxthefish Plugin Development 10 13/07/2013 11:56 AM
Как узнать что камера игрока смотрит в направлении персонажа? mastermax7777 Русский/Russian 14 11/02/2013 08:27 PM
[Tool/Web/Other] MySQL DB Manager - Easily manage your MySQL databases with this remote application fiki574 Tools and Files 13 22/07/2012 10:41 AM


All times are GMT. The time now is 08:03 AM.


Powered by vBulletin® Version 3.8.6
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.