Ранжирование запросов PHP / MYSQL с использованием вторичных таблиц - PullRequest
0 голосов
/ 23 сентября 2011

Работа с алгоритмом ранжирования, но я разочарован множественными вызовами базы данных и вращением данных, мне нужно пройти, чтобы вычислить ранг определенного элемента, вывести его в массив, а затем отсортировать по значение ранга. Возможно ли в MySQL вычислить ранг данной строки на основе данных, найденных в других таблицах?

SELECT key_value FROM table;

Теперь по результирующему набору мне нужно ранжировать каждый элемент на основе различных других таблиц информации об этих элементах. Так что, если вывод был -

|key_value|
|abcd1    |
|abcd2    |
|abcd3    |

Затем, основываясь на значениях 'abcd1' в 3 других таблицах, мне нужно ранжировать каждую запись на основе значения, разделенного на общее количество, вернуть ранг и затем вывести его. Есть ли способ сделать все это в одном операторе SQL? Я думал о настройке некоторых переменных sql и сохранении различных вызовов, а затем о выполнении вычислений, но я все еще не уверен, как бы вы присвоили это выводу операторов SELECT и соответствующим образом оценили его. Я хорошо разбираюсь в PHP, но я вроде MySQL n00b.

Это, вероятно, сбивает с толку способ, которым я описываю это - я могу ответить на больше вопросов, чтобы помочь лучше объяснить, что я пытаюсь сделать.

По сути, каждая строка, возвращаемая в исходном операторе, действительно относится только к каждому пользователю на основе информации, хранящейся об этом объекте в 3 других таблицах. Необходимо знать, как наилучшим образом использовать данные в 3 других таблицах для ранжирования релевантности данных из первой таблицы.

1 Ответ

0 голосов
/ 23 сентября 2011

Ключевым моментом здесь является то, что вам нужно JOIN другие ваши таблицы, а затем ORDER BY некоторое выражение в их полях.

SELECT key_value 
FROM table
LEFT JOIN table_b on table_b.field = table.key_value
LEFT JOIN table_c on table_c.field = table.key_value
LEFT JOIN table_d on table_d.field = table.key_value
ORDER BY table_b.some_field DESC, (table_c.another_field / table_d.something_else) ASC
;

В зависимости от условий соединения вам может понадобиться GROUP BY table.key_valueили даже использовать подзапросы для достижения соответствующего эффекта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...