2016-12-07 1 views
1

Я пытаюсь получить средний рейтинг для столбца rate в моей таблице rating. Посмотрев на многие способы сделать это, мне кажется, что ничего не работает. Однако он работает, если я не пытаюсь принять среднее значение.Попытка получить среднее значение столбца с тремя внутренними таблицами объединения MySQL

Вот мой код (Покушение 1):

$sql = "SELECT * FROM users 
      INNER JOIN mentor ON users.id = mentor.id 
      INNER JOIN (SELECT AVG(rating.rate) AS average 
      FROM rating GROUP BY rating.owner) 
      ON mentor.id = rating.owner ORDER BY RAND()"; 

Вот мой код (Покушение 2):

$sql = "SELECT users.id, users.username, 
      mentor.industry, mentor.city, 
      AVG(rating.rate) AS average FROM users 
      INNER JOIN mentor ON users.id = mentor.id 
      INNER JOIN rating ON mentor.id = rating.owner 
      ORDER BY RAND()"; 

Код после SELECT заявления заключается в следующем:

$res = mysqli_query($db,$sql) or die(mysqli_error());    
if (mysqli_num_rows($res)>0) { 
    while ($row=mysqli_fetch_assoc($res)){ 
     $variable= $row['column']; 
// more variable naming 
    } 
} 

Всякий раз, когда я повторно загружаю свою страницу, она полностью белая. В журнале консоли говорится: «Не удалось загрузить ресурс: сервер ответил статусом 404 (не найден)». Не совсем уверен, что делать дальше. Спасибо за любые советы, предложения!

Столбец owner является = mentor.id = users.id

+1

Сообщение 404 не имеет ничего общего с SQL. как вы вызываете этот запрос? – WillardSolutions

+0

@EatPeanutButter Код после оператора select: $ res = mysqli_query ($ db, $ sql) или die (mysqli_error()); \t \t \t \t если (mysqli_num_rows ($ Res) ^> 0) { \t в то время ($ строка = mysqli_fetch_assoc ($ Res)) { \t \t $ переменная = $ строки [ 'столбца'], ' – Millica

ответ

0

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

Вторая проблема - ваш SQL-запрос, что совершенно неправильно. Вы пытаетесь получить данные записи и агрегировать без group ing, которые будут вызывать ошибки. Вторая попытка ближе к правильному решению, поэтому давайте начнем с этого момента. Это попытка:

SELECT users.id, users.username, 
      mentor.industry, mentor.city, 
      AVG(rating.rate) AS average FROM users 
      INNER JOIN mentor ON users.id = mentor.id 
      INNER JOIN rating ON mentor.id = rating.owner 
      ORDER BY RAND() 

Попробуйте выполнить этот запрос в СУБД, как есть. Вы получите сообщение об ошибке. Вы должны group результат пользователем, поэтому пользовательские данные станут агрегировать и так наставники дают рейтинги, вы не можете select наставника, но вы можете select среднее rating, но затем groupusers:

SELECT users.id, users.username, 
      AVG(rating.rate) AS average FROM users 
      INNER JOIN mentor ON users.id = mentor.id 
      INNER JOIN rating ON mentor.id = rating.owner 
      group by users.id, users.username 
      ORDER BY RAND() 
+0

Это отлично работает! ! Я не могу поблагодарить вас за вашу помощь! Я так старался, и это был отличный урок для меня. Спасибо огромное! – Millica

+0

@ Миллика, добро пожаловать, я счастлив, что смогу вам помочь. –

+0

Еще раз спасибо за вашу помощь! У меня есть еще один маленький вопрос для вас. Я пытаюсь добавить предложение 'where' до' ORDER BY RAND() '. Есть ли у вас какие-либо советы о том, как это сделать? Это то, что у меня есть до сих пор: «WHERE mentor.mentor_enabled = '1'', но он, похоже, не работает. Заранее спасибо! – Millica

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