powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Порядок выбора записей из базы (не ORDER BY)
15 сообщений из 15, страница 1 из 1
Порядок выбора записей из базы (не ORDER BY)
    #32714297
mrMaRk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Укажите путь!

Есть таблица с записями товаров вида:
create table products(
prodid int(4) unsigned primary key auto_increment,
description char(255),
price float(4,2) unsigned
)
prodid_|_description_|_price
__1______text_1_____3.00
__2______text_2_____3.50
__3______text_3_____4.22
__4______text_4_____1.50
__5______text_5_____2.33

Нужно каким-то образом закрепить порядок выбора некоторых записей, то есть так, чтоб например за prod_id-3 была закреплена 1-я позиция, а за prod_id-1 закреплена 4-я позиция, то есть в результате должна быть такая последовательность: prod_id-3, далее на второй и третьей позиции записи в зависимости от сортировки (но не prod_id-1), prod_id-1, остальные записи так же в зависимости от сортировки...
В таблице порядка 50 тысяч записей.
...
Рейтинг: 0 / 0
Порядок выбора записей из базы (не ORDER BY)
    #32714316
Arickkkkk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А может зависти ещё столбец Position, в котором будет храниться позиция строки и уже его сортировать Order by
...
Рейтинг: 0 / 0
Порядок выбора записей из базы (не ORDER BY)
    #32714327
mrMaRk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
позиция не должна быть закреплена за не "фиксированными" записями, потому на них должен влиять order by
...
Рейтинг: 0 / 0
Порядок выбора записей из базы (не ORDER BY)
    #32714361
Фотография Хрен
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В соответствии с стандартом sql удинственный путь получить записи в определенном порядке (хоть в каком) это order by

Во всех остальный случаях порядок записей в результате неопределен.
так что ваша постановка задачи некорректна
...
Рейтинг: 0 / 0
Порядок выбора записей из базы (не ORDER BY)
    #32714374
mrMaRk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кто бы спорил!!!
Но должны же быть какие либо возможности сделать так, чтоб записи были в нужном мне порядке...
...
Рейтинг: 0 / 0
Порядок выбора записей из базы (не ORDER BY)
    #32714376
mrMaRk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
p.s. я не отказываюсь от order by
...
Рейтинг: 0 / 0
Порядок выбора записей из базы (не ORDER BY)
    #32714645
olk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mrMaRkp.s. я не отказываюсь от order by
добавте поле Position [default null] - как вам уже советовали,
у "фиксированных" записей проставляйте необходимое значение ,
у остальных по умолчанию NULL, далее
order by position,prod_id
(правда не помню как идет сортировка при NULL вроде должна NULL - убирать в конец)
...
Рейтинг: 0 / 0
Порядок выбора записей из базы (не ORDER BY)
    #32714681
mrMaRk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
null попадает в зависимости от типа (по убыванию/возрастанию) - в первом случае в конце, во втором сначала, но это не то, т.к. записи с null значением не попадут между фиксированными, если между ними имеется "зазор"
...
Рейтинг: 0 / 0
Порядок выбора записей из базы (не ORDER BY)
    #32714840
olk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mrMaRknull попадает в зависимости от типа (по убыванию/возрастанию) - в первом случае в конце, во втором сначала, но это не то, т.к. записи с null значением не попадут между фиксированными, если между ними имеется "зазор"
Ну извратиться то всегда можно :))
разбейте на два диапазона ...

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
create table products 
(id int not null primary key auto_increment,
 prodname  varchar( 40 ),
 position int default  200 );

insert into products set  prodname ='prod 1';
insert into products set  prodname ='prod 2';
insert into products set  prodname ='prod 3';
insert into products set  prodname ='prod 4';
insert into products set  prodname ='prod 5';
insert into products set  prodname ='prod 6';
insert into products set  prodname ='prod 7';
insert into products set  prodname ='prod 8';

update products set position =  100  where id< 4 ;
update products set position =  1  where id= 3 ;
update products set position =  101  where id= 1 ;

select * from products order by position,id;

+ ----+--------+----------+ 
| id |prodname| position |
+ ----+--------+----------+ 
|   3  | prod  3  |         1  |
|   2  | prod  2  |       100  |
|   4  | prod  4  |       100  |
|   1  | prod  1  |       101  |
|   5  | prod  5  |       200  |
|   6  | prod  6  |       200  |
|   7  | prod  7  |       200  |
|   8  | prod  8  |       200  |
+ ----+--------+----------+ 
 8  rows in set ( 0 . 00  sec)




...
Рейтинг: 0 / 0
Порядок выбора записей из базы (не ORDER BY)
    #32714871
mrMaRk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
не совсем так... нежелательно (точнее нельзя исходя из задачи) закреплять в базе позицию за "плавающими" записями, необходимо, чтобы остальные свободно сортировались по разным полям
...
Рейтинг: 0 / 0
Порядок выбора записей из базы (не ORDER BY)
    #32715025
BigHarry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ORDER BY оперирует конкретными полями в запросе. Если это поле нельзя засунуть в таблицу или каким-то макаром расчитать - то тут уж, извините, ничего не получится - одного желания мало, что бы все выводилось в нужном порядке.
...
Рейтинг: 0 / 0
Порядок выбора записей из базы (не ORDER BY)
    #32715184
olk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mrMaRkне совсем так... нежелательно (точнее нельзя исходя из задачи) закреплять в базе позицию за "плавающими" записями, необходимо, чтобы остальные свободно сортировались по разным полям
Ну вы батенька извращенец :))
ну попробуйте так что ли, хотя за детерминированность результата не ручаюсь :)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
select id,prodname, 1  as pos from products where id= 3 
union 
(select id,prodname, 2  as pos from products where id<> 1  and id<> 3  limit  0 , 2 )
union  
select id,prodname, 3  as pos from products where id= 1 
union 
(select id,prodname, 4  as pos from products where id<> 1  and id<> 3  limit  2 , 99999999999 )
order by pos,id;

+ ----+--------+-----+ 
| id |prodname| pos |
+ ----+--------+-----+ 
|   3  | prod  3  |    1  |
|   2  | prod  2  |    2  |
|   4  | prod  4  |    2  |
|   1  | prod  1  |    3  |
|   5  | prod  5  |    4  |
|   6  | prod  6  |    4  |
|   7  | prod  7  |    4  |
|   8  | prod  8  |    4  |
+ ----+--------+-----+ 
 8  rows in set ( 0 . 00  sec)

...
Рейтинг: 0 / 0
Порядок выбора записей из базы (не ORDER BY)
    #32715246
olk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чуть чуть уточню ...
пусть @FIELD_SORT - поле сортировки не фиксированных записей
@ID_FIRST - ид верхней записи
@ID_OTHER - ид еще одной записи которую нужно зафиксировать
на позиции @N
тогда запрос приобретает вид
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
(select id,prodname,price, 1  as pos from products where id=@ID_FIRST)
union
(select id,prodname,price, 2  as pos from products where id<>@ID_FIRST and id<>@ID_OTHER order by @FIELD_SORT imit @N- 2 )
union
(select id,prodname,price, 3  as pos from products where id=@ID_OTHER)
union
(select id,prodname,price, 4  as pos from products where id<>@ID_FIRST and id<>@ID_OTHER order by @FIELD_SORT limit @N- 2 , 99999999999 )
order by pos;
...
Рейтинг: 0 / 0
Порядок выбора записей из базы (не ORDER BY)
    #32715307
mrMaRk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
небольшое уточнение:
записей с фиксированной позицией может быть неопределенное количество, и
зазор между ними как может так и не может быть
...
Рейтинг: 0 / 0
Порядок выбора записей из базы (не ORDER BY)
    #32715356
olk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mrMaRkнебольшое уточнение:
записей с фиксированной позицией может быть неопределенное количество, и
зазор между ними как может так и не может быть
Ну я не волшебник
определитесь что вам надо ...
откуда посылаете запрос (на чем клиент ?)
как (чем) определяются фиксированные записи и промежутки между ними (или позиции в текущей выборке)?
перешлите 20 баксов на мой web money кошелек и завтра у вас будет решение ....
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Порядок выбора записей из базы (не ORDER BY)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]