powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Вывод в случайном порядке одного типа, затем следующего типа.
10 сообщений из 10, страница 1 из 1
Вывод в случайном порядке одного типа, затем следующего типа.
    #39857840
rubiks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.
Задача такая:
База такая упрощенный вариант:

table
_____
id name type
1 name1 A
2 name1
3 name1 A
4 name1
5 name1
6 name1 A



Делаем поочередные запросы в базу.
Одному любому пользователю - запись показывается один раз.

Сначала нужно вывести все записи с type=A

Затем все остальные записи.
Сейчас я делаю так:

SELECT * from table
ORDER BY type DESC
LIMIT 0,1


Соответственно мне все это выводиться в определенном порядке.

И всем пользователям выводится в таком порядке.

А мне нужно выводить всегда в разном порядке. Т.е. в случайном.
Но, сначала в случайном порядке поля с type=A
А потом все остальные, тоже в случайном.

Если смотреть в базу выше. То, получается сначала нужно вывести (случайным образом) записи с id: 3, 1, 6.
Затем все остальные.

Можно ли это сделать в одном запросе?
Если да, то как? Или куда копать?
...
Рейтинг: 0 / 0
Вывод в случайном порядке одного типа, затем следующего типа.
    #39857875
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добавьте второй уровень сортировки:
Код: sql
1.
ORDER BY type DESC, RAND()



Вот только какой смысл в случайной сортировке при LIMIT 0,1 - до меня лично не доходит...
...
Рейтинг: 0 / 0
Вывод в случайном порядке одного типа, затем следующего типа.
    #39857885
rubiks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AkinaДобавьте второй уровень сортировки:
Код: sql
1.
ORDER BY type DESC, RAND()



Спасибо. Попробую.


AkinaВот только какой смысл в случайной сортировке при LIMIT 0,1 - до меня лично не доходит...
Смысл такой:
Разным пользователям приходят записи от сервера. По одной штуке.
И нужно, чтобы порядок был разным.

Чтобы было еще понятнее:

Приходит вопрос с вариантами ответов.
Нужно, чтобы у разных пользователей был разный порядок получения вопросов.
...
Рейтинг: 0 / 0
Вывод в случайном порядке одного типа, затем следующего типа.
    #39857916
rubiks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Эм. Работает. Но, не так как нужно.

Дополню:

Таблица questions:
id text type

Таблица answers:
id title question_id


Я одним запросом вытягиваю и 1 вопрос , а так же 4 варианта ответа.
Вот так это делаю (добавил второй уровень сортировки RAND() ):

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
SELECT q.id as q_id,
     q.text as q_text,
     a.id as a_id,
     a.title as a_title
FROM questions as q
LEFT JOIN answers as a ON q.id = a.question_id
ORDER BY type DESC, RAND()
LIMIT 0, 4



Теперь вместо одного вопроса, выбираются 4 разных вопроса.
Без RAND() выдает один вопрос и его 4 варианта ответа. Но, не случайно.

Как-то можно выбрать 1 случайный вопрос и его 4 варианта ответа?
...
Рейтинг: 0 / 0
Вывод в случайном порядке одного типа, затем следующего типа.
    #39857920
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rubiksКак-то можно выбрать 1 случайный вопрос и его 4 варианта ответа?Если надо выбрать случайный ВОПРОС - то в подзапросе следует выбирать именно один вопрос при случайной сортировке. И только потом лепить к нему его ответы.
...
Рейтинг: 0 / 0
Вывод в случайном порядке одного типа, затем следующего типа.
    #39857969
rubiks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,

Но, тогда я не получу данных о самом вопросе.
Только ответы придут мне.
Или я не правильно понял?
...
Рейтинг: 0 / 0
Вывод в случайном порядке одного типа, затем следующего типа.
    #39858015
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rubiksтогда я не получу данных о самом вопросе.Сфига бы? не, если забыть в список полей вывода добавить поля из подзапроса - так и будет, но кто ж в том виноват?
...
Рейтинг: 0 / 0
Вывод в случайном порядке одного типа, затем следующего типа.
    #39858045
rubiks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,

Если я правильно понял то, как-то так?

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
SELECT      
         a.id as a_id, 
a.question_id as a_question_id ,
      a.title as a_title ,
(SELECT q.text as q_text FROM questions as q  WHERE q.id = a.question_id) q_text

FROM answers AS a 

WHERE a.question_id = ( 
 SELECT q.id 
 FROM questions as q 
 ORDER BY needed DESC , RAND() 
 LIMIT 0,1 
)
LIMIT 0, 4



Если да, то это уже два вложенных запроса. Если мне нужно будет что-то еще вытягивать из таблицы questions , то нужно будет еще один подзапрос писать.
Не понятно, что с нагрузкой. Может сразу проще сделать отдельно два запроса?

И, кстати, так пока и не понял, как вытягивать только один вопрос.
Сейчас вышеуказанный код вытягивает 4 разных вопроса.
...
Рейтинг: 0 / 0
Вывод в случайном порядке одного типа, затем следующего типа.
    #39858055
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rubiksЕсли я правильно понялУвы, неправильно.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SELECT q.id as q_id,
       q.text as q_text,
       a.id as a_id,
       a.title as a_title
FROM     ( SELECT *
           FROM questions
           ORDER BY RAND() LIMIT 1) AS q
LEFT JOIN answers as a ON q.id = a.question_id
ORDER BY type DESC, RAND()
LIMIT 4
...
Рейтинг: 0 / 0
Вывод в случайном порядке одного типа, затем следующего типа.
    #39858121
rubiks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,

Большое спасибо.
Все работает.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Вывод в случайном порядке одного типа, затем следующего типа.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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