2012-02-27 3 views
0

Хорошо, как я могу объяснить.MySql Присоединиться и подзапрос

  • Существует много child.sid до parent.id.
  • Есть много child.nid к child.sid
  • Есть много child.id к child.nid

child.id только идентификатор дочерней строки. И каждая строка имеет столбец rating.

В запросе я группирую child.nid. Но возвращаемые результаты - это первая запись (самая низкая child.id) для каждого nid. То, что я хочу, является самым высоким рейтингом child.id за это nid.

$construct = "SELECT child.* FROM outcomes child 
    JOIN outcomes parent on parent.id=child.sid JOIN  
    WHERE (parent.name LIKE '%$search%') GROUP BY child.nid,child.sid 
    ORDER BY child.rating DESC"; 

Я попытался ORDER BY child.rating DESC, но это должно произойти до GROUP BY child.nid.

Любая идея, как решить эту проблему? подзапрос?

ответ

0

Вы можете определенно обернуть его в другой запрос, как это:

$construct = "SELECT * FROM (SELECT child.* FROM child 
JOIN parent on parent.id=child.sid JOIN  
WHERE (parent.name LIKE '%$search%') GROUP BY child.nid,child.sid) 
ORDER BY child.rating DESC"; 

Смотреть EXPLAIN отчет, хотя и проверить оптимизацию производительности при выполнении ничего подобного.

EDIT: Обновлен код для удаления ссылки на родительскую базу данных.

+0

попробовал это и он i ошибка «У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашему серверу MySQL ... ». он все еще не работает – user892134

+0

Я только что вставил ваш код и разместил запрос, поэтому я предположил, что ваш исходный запрос был прав, но он выглядит неправильно. Я обновил его, чтобы удалить два экземпляра результатов слова, которые выглядят как проблема. – davidethell

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