4 / 4 / 0
Регистрация: 11.04.2012
Сообщений: 43

Сортировка и группировка

27.10.2013, 02:53. Показов 1183. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть гипотетическая задача:
Несколько пользователей отвечают на тест из 9-ти вопросов. (Предположительно у каждого ответа есть свой уникальный id)
Нужно пользователям с одинаковыми ответами (набором id-шников) отсылать уведомление что "они не одиноки".

Не по теме:

сразу оговорюсь что в программировании (в т.ч. веб) знаний уйма - опыта мало



Путь решения который я вижу:
Каждому уникальному набору ответов - давать "общий" id (который означал бы эту последовательность (т.е. уникальные последовательности ответов(ПО) получают id++, а если у кого либо ПО будет, как у другого человека, то этой ПО даётся тот же "общий" id, что и его копии)), после чего всем людям у которых одинаковый "общий" id - сообщается об этом.

Трабл в том что не знаю как реализовать (просто на php или с задействованием мускула?)
Если есть какие то умные мысли и\или советы - помогите пожалуйста новичку
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
27.10.2013, 02:53
Ответы с готовыми решениями:

Сортировка и группировка двух полей
Здравствуйте SELECT *,concat(`user_to`,`user_send`) as `k` FROM `message` WHERE `user_to`='8' UNION SELECT ...

Сортировка и группировка с лимитов в одном апросе
Доброго времени суток! Есть такой запрос: SELECT ad_id, site, link, name, description, ad_img FROM ads WHERE site NOT IN...

Группировка данных
Здравствуйте. Подскажите пожалуйста, каким образом можно вывести данные из такой структуры без повторений. Структура на скрин-шоте. Таким...

2
363 / 334 / 38
Регистрация: 29.03.2011
Сообщений: 838
27.10.2013, 05:05
Johnnyk4, первое, что пришло в голову - сериализовать (представить строкой) набор ответов и вычислить от них хэш (md5 - вполне пойдёт).
Дальше всё зависит от реализации. Пусть будет мускуль, тогда предполагаю такую структуру (псевдокод):
SQL
1
2
3
4
5
6
7
8
9
TABLE question ( id, title, text )
TABLE q_sequence ( id, name ) -- последовательность вопросов (м.б., стоит назвать "анкета", "опрос", "вопросный лист" )
-- по сути тут ваши 9 вопросов сейчас хранятся (пусть будет "анкета")
TABLE seq_question ( seq_id, q_id, num ) -- m:m - порядок и id-ы вопросов в "анкете".
TABLE q_answer ( id, q_id, text ) -- 1:m с question - на 1 вопрос может быть множество ответов.
TABLE users ( id, name, ... )
TABLE user_answer ( num, user_id, answ_id ) -- m:m user - q_answer, num - порядковый номер ответа (последовательность ответов)
-- и добавляем ещё
TABLE user_answer_hash ( id, user_id, seq_id, hash ) -- хэш ответов пользователя на опред. вопросник.
Таблицы в 3й нормальной форме, потому их много, возможно, столько и не требуется. Но теперь задача сказать юзеру, сколько ещё людей ответили так же как и он - тривиальна:
SQL
1
SELECT COUNT(*) FROM user_answer_hash WHERE `hash`='$user_hash'
1
4 / 4 / 0
Регистрация: 11.04.2012
Сообщений: 43
28.10.2013, 13:28  [ТС]
я не знаю, может вы мне предложили тоже самое или я не корректно описал задачу, но что если:
есть 9 вопросов, на каждый например 3 варианта ответа (у каждого вопроса может быть id от 0 до 3), после ответа человека на все вопросы мы направим в бд информацию от последовательности ответов, например - 102301213, после чего мы выведем человеку все такие же "последовательности" в бд.

т.е. получается:
SQL
1
TABLE search1 (id, question) -- id-имя человека, question-последовательность ответов.
после чего при ответа на все вопросы, человек отсылает информацию в бд search, и идёт запрос:
SQL
1
SELECT id FROM search1 WHERE question LIKE question; -- (понимаю, что выведется и сам человек который ответил).
**написал - понял что у вас тоже самое... ладно, конкретизируем задачу:
Ответы будут даваться людьми в короткий промежуток времени (т.е. например 10 человек в 3 минуты), нужно:
1. если 10 человек ответило на "анкету", и у всех одинаковый id-ы, что бы после того как накопилось например 5 людей(записей) с одинаковыми id-ами, они все удалялись. Т.е. первым 5-ти ответившим отправлялась инфа друг о друге, второй "пятёрке" так же и т.д.

Не по теме:

да криво объясняю... щас попробую переформулировать задачу из первого поста...


Дано:
1. Есть n "статичных" вопросов (не более 10), на каждый из которых n "статичных" ответов (статичный\е = никогда не меняются, etc)
Кликните здесь для просмотра всего текста
я планирую реализовывать связь вопрос-ответ, не через БД, а через php (сильно накладнее получиться по сравнению с реализацией через бд?

2. После ответа человека инфа об "ПО" отправляется в бд и выводятся такие же "ПО".
Кликните здесь для просмотра всего текста
пока ничего не изменилось в дано, да

2.1 "Ответы" от бд юзерам должны выдаваться не сразу. Т.е. мы ответили на вопросы, инфо об этом оправилась в бд, далее если таких-же ответов меньше 5 (например 2), то нам выводится таблица в которой 3 строки: 1.Id человека который ответил. 2."Скрытый" Id-другого юзера который так же ответил. 3. "Скрытый" Id-другого юзера который так же ответил.
Т.е. принимаем, что все эти 3 человека прямо щас на сайте и ответили +- только что.
2.2. Если наш ответ 5-й, то всем юзерам оправляется "не скрытая" инфо о всех 5-ти.
2.2.1. Проверка на то набралась ли 5-ка ответивших делается например каждые 30 сек, но не дольше 5-ти минут, после первого ответившего.
2.2.2. По прошествию 5-ти минут, после первого ответившего, если не набралось 5-ть человек (с одинаковыми id-ми), то всем людям что есть (от 1 до 5) отправляется "не скрытая" инфо друг о друге.
3. После отсылки "не скрытой" инфо -> удалять инфо об этих людях и их ответах из бд.

На готовую реализацию конечно же не претендую (хотя если она не большая, был бы не против ), хотелось бы услышать мысли - кто что думает (учитывая, что кол-во запросов предположительно может быть 1 запрос (с "по" в секунду).
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
28.10.2013, 13:28
Помогаю со студенческими работами здесь

Группировка с сортировкой.
Всем привет! Есть база данных text со столбцами id, title, order, date. Значения: 1,Первое название,7,2012-04-04 12:34:53 2,Второе...

Группировка результатов
Добрый день! Нужно создать запрос из: "select name, type from t_vid" что бы получить массив следующего вида: Array ( ...

Группировка по горизонтали
Добрый вечер! 1) Константы определенного времени INSERT INTO `time_lessons` (`t_id`, `t_time`) VALUES (1, '10:00-10:30'), (2,...

Группировка выводимых данных
Добрый день. Есть база данных с таблицей, вот такого вида: Хочу собрать статистику согласных и не согласных по подъездам. И получить...

Группировка данных по дате
Мне нужно чтобы из таблицы вида 2016-01-27 | user1 2016-01-27 | user2 2016-01-28 | user3 2016-01-28 | user4 Получился вывод...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

Новые блоги и статьи
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а привычная функция main(). . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru