2013-03-24 4 views
0

Для новой версии веб-сайта я размещаю раздел «Топ-пользователь» на главной странице. Это позволяет людям голосовать за пользователя в кучу разных категорий. Вся эта информация хранится в базе данных MySQL в двух основных таблицах. Одна таблица имеет информацию (id * autogenerated *, Username, Date added и т. Д.), А другая имеет ставки (id * autogenerated *, linkID, rowAvg, avg, avg2 и т. Д.). Таблица linkID из таблицы тарифов соответствует таблице id. Как работает запрос, он запрашивает через rate_table, заказывает его по наивысшим средним значениям, затем выбирает первые 10 результатов. Затем, используя linkID этой строки, я выбираю фактическую информацию для этого пользователя из info_table. Это прекрасно и денди, если у каждого пользователя есть только 1 ставка. Что происходит, когда у пользователя есть 2 или более ставок, и обе ставки положительны, запрос выбирает оба из них и извлекает информацию для каждой из двух строк, которая затем отображается как два разных пользователя, даже если это то же самое человек. Как я могу сделать запрос rate_table, когда есть несколько ставок для одного и того же linkID, и усредняйте их вместе, а не показывая их как двух разных людей. Я думал о том, чтобы вставить каждый linkID в массив, а затем для каждой впоследствии выбранной строки, проверьте, находится ли этот linkID в массиве. Если нет, вставьте его, если это так, затем сравните их вместе и сохраните в массиве и используйте массив, чтобы заполнить таблицу на главной странице. Я чувствую, что я слишком задумываюсь об этом. Извините, если это немного запутанно. Если вам нужна дополнительная информация, дайте мне знать.PHP расширенная фильтрация MySQL

P.S. Я все еще участвую в MySQL-запросах, поэтому приношу свои извинения, если я собираюсь сделать это совершенно неправильно, и вы потратили последние несколько минут, пытаясь понять, что я говорю: P

P.P.S. Я знаю, что больше не должен использовать MySQL_Query и должен делать готовые заявления. Я хочу осваивать MySQL-запросы, потому что это то, что использует базы данных FMDB для использования iOS, тогда я перейду к обучению подготовленных операторов.

+1

Это может помочь вам в нужном направлении [MySQL Aggregate Functions] (http://dev.mysql.com/doc/refman/5.0/ru/group-by-functions.html). 'AVG()' может быть тем, что вы ищете. (В среднем один результат - это именно тот результат, так что он все равно должен работать) – Aiias

+0

Похоже, что это поможет, но как запрос будет знать, в какие строки запускается функция 'AVG()? Есть функция, которая обнаруживает повторяющиеся значения для столбца? –

+2

Используйте пункт ['GROUP BY'] (http://dev.mysql.com/doc/refman/5.0/en/select.html) столбца, который должен быть уникальным. – Aiias

ответ

0

Посмотрите на некоторые из MySQL Aggregate Functions.

AVG() может быть тем, что вы ищете. В среднем один результат - это именно тот результат, который должен работать. Используйте предложение GROUP BY в столбце, который должен быть уникальным, чтобы выполнить вычисление совокупности по сгруппированным строкам.

+0

Последний последний вопрос, так как я использую функцию LIMIT 10, если есть две строки, она объединяет эти два, но показывает только остальные 9 строк. Он больше не показывает полный 10. Как заставить его выбрать еще одну строку, если некоторые из них объединены? –

+0

@JoeTorraca - Это не очень простой расчет для запуска в MySQL. Посмотрите на этот существующий вопрос по этой теме: http://stackoverflow.com/questions/2643314/mysql-group-by-limit. – Aiias

+0

Хорошо, спасибо за вашу помощь –

Смежные вопросы