Помогите разобраться с очень сложной задачей построения БД и выборки...

Sirius

PHP+MySQL=LOVE
Помогите разобраться с очень сложной задачей построения БД и выборки...

Привет Всем:)

Типа проект "Дружба-скрипт для школьников" :))))

Есть предметы:
1. Математика
2. Русский
3. Литература
4. Биология
5. Астрономия


Каждый школьник должен расположить их в порядке, в котором ему предметы более всего симпотизируют. Например регится первый юзверь и заполняет свой ник и:
5,2,3,4,1 (То есть первая астрономия, второй русский и т.д.)

Поиск должен выполняться так, выдавать школьникам анкеты тех у кого наиболее совпадают с ним вкусы. То есть:

5.2.3.4.1 - наш школьник
-
4.3.2.5.1 - другой школьник
_________
1+1+1+1+0 = 4

ТО есть совпадение = 4, в сравнении с другими это может быть больше или меньше... Так вот надо выбрать так, чтобы сортировались по тем, кто более подходит.

Никак не могу себе представить такую таблицу... Если кто имеете какие идеи, или что-то такое делал, то помогите пожалуйста :(...
Спасибо!
 
Я, не претендуя на правильность - просто мысль, сделал бы так:
Берем наивысший результат проголосовавшего по первому (самому любимому предмету).
Результаты остальных сортируем по нему и присваиваем всем очки пропорционально ими набранным.
Затем следующий предмет и так далее.
В итоге просто сравниваем количество набранных очков и располагаем их кого ближе, кого дальше от проголосовавшего.

Причем если всего предметов 5, по первому предмету я дал бы большее очков, чем по второму и т.д. Т.е. - Самый любимый предмет имеет наибольший приоритет.

Если вопрос был, как сделать, извини...

Но, совершенно уверен, что другие подскажут более простой и лучший ответ
 
Я, не претендуя на правильность - просто мысль, сделал бы так:
Берем наивысший результат проголосовавшего по первому (самому любимому предмету).
Результаты остальных сортируем по нему и присваиваем всем очки пропорционально ими набранным.
Затем следующий предмет и так далее.
В итоге просто сравниваем количество набранных очков и располагаем их кого ближе, кого дальше от проголосовавшего.

Причем если всего предметов 5, по первому предмету я дал бы большее очков, чем по второму и т.д. Т.е. - Самый любимый предмет имеет наибольший приоритет.

Если вопрос был, как сделать, извини...

Но, совершенно уверен, что другие подскажут более простой и лучший ответ
 

Sirius

PHP+MySQL=LOVE
Неа... Нужна реализация именно той схемы которую я привёл. Сортировка не подходит, юзер может не подходить по первому предмету, но остальные предметы могут быть совершенно одинаковыми и он останется в конце сортировки...

Нужно считать по формуле!
 
юзер может не подходить по первому предмету, но остальные предметы могут быть совершенно одинаковыми и он останется в конце сортировки...
Может я и глубоко заблуждаюсь, но...
Если считать очки (по каждой дисциплие!!), то юзер не останется в конце списка. Ведь подсчитываются не только, кто сдал на 5-ку. Так ты поймешь, кто ближе, несмотря на то, что по первому предмету вы сходитесь или расходитесь...

Но где же асы?!!
 

Demiurg

Guest
Структура должна быть такая примерно :
таблица школьников
таблица предметов
таблица предпочтений(id школьника, id предмета , оценка , на все поля составной уникальный ключ)

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

Sirius

PHP+MySQL=LOVE
А я придумал просто так:

id,
f1,
f2,
f3,
f4,
f5,
...

Где fn - это предметы и их места...
При известных значениях данного поиска(то есть я знаю кто ищет - его параметры выбора предметов - $f1,$f2...)

select ABS(f1 - $f1) + ABS(f2 - $f2) + ABS(f3 - $f3) + ABS(f4 - $f4) + ABS(f5 - $f5) as last_point from mytable order by last_point;

Вроде не сложный запрос поиска, нормально?
 

Demiurg

Guest
Sirius, а когда добавится новый предмет ты будешь все переписывать ?
 

Falc

Новичок
По мойму логичнее использовать не разничу в ID предметов, а равенство, если предметы равны тогда 0 иначе 1
 

pauk

Новичок
Re: Помогите разобраться с очень сложной задачей построения БД и выборки...

Автор оригинала: Sirius
Привет Всем:)

Типа проект "Дружба-скрипт для школьников" :))))

Есть предметы:
1. Математика
2. Русский
3. Литература
4. Биология
5. Астрономия


Каждый школьник должен расположить их в порядке, в котором ему предметы более всего симпотизируют. Например регится первый юзверь и заполняет свой ник и:
5,2,3,4,1 (То есть первая астрономия, второй русский и т.д.)

Поиск должен выполняться так, выдавать школьникам анкеты тех у кого наиболее совпадают с ним вкусы. То есть:

5.2.3.4.1 - наш школьник
-
4.3.2.5.1 - другой школьник
_________
1+1+1+1+0 = 4

ТО есть совпадение = 4, в сравнении с другими это может быть больше или меньше... Так вот надо выбрать так, чтобы сортировались по тем, кто более подходит.

Никак не могу себе представить такую таблицу... Если кто имеете какие идеи, или что-то такое делал, то помогите пожалуйста :(...
Спасибо!
Таблиц надо три:
- ученики (с ключем id)
- предметы
- выбор (id, предпочтения)

Далее сравниваются ученики на предмет совпадения, выводится максимальное число и ученики ему соответствующие.
с РНР это легко сделать, затолкав все в массивы;)
 
Сверху