Задавайте вопросы, мы ответим
Вы не зашли.
Задача:
3. Вывести средний возраст тех спортсменов, кто когда-либо проводил тренировки (т.е. был в качестве тренера).
dump базы. (если нужно) http://share.auditory.ru/2014/Viktor.Zaytsev/bd/vol.sql
Имеются таблицы участников и тренировок, у тренировок поле с id'шником тренера.
Когда я отправил этот запрос:
SELECT AVG(`members`.`age`) FROM `members`, `training` WHERE `members`.`id` = `training`.`coach`
Возвращается среднее, зависимое от количества участий какого либо тренера, т.е.
У нас есть тренер 1, ему 40 лет, есть 2ой, ему 30 лет.
Пусть 1ый провел 2 занятия, а второй одно.
Их среднее должно быть (40+30)/2, а запрос выводит (40+40+30)/3 (понимаю почему).
Помогите люди добрые , какой будет правильный запрос?
Отредактированно zvv1992 (03.12.2011 23:02:35)
Неактивен
Добавьте группировку по `training`.`coach`, хотя мне кажется, что результат тоже будет не совсем правильный, надо проверять.
100% рабочий вариант: выборка делается в 2 шага, можно использовать подзапрос. Сначала надо определить id тех спортсменов, кто когда-либо был тренером, а уже потом определять AVG по найденным записям.
Неактивен
Кому интересно - вот команда выборки
SELECT AVG( `members`.`age` )
FROM `members` , `training`
WHERE `members`.`age` IN (SELECT `members`.`age` FROM `members`, `training` WHERE `training`.`coach` = `members`.`id`)
Вспомогательный материал : http://mysql.ru/docs/gruber/mg10.html
Нифига она неверна ='(
Вот оно решение моей мечты (сам, кстати, переделал):
SELECT AVG( `members`.`age` )
FROM `members` JOIN `training` ON `members`.`id` = `training`.`coach`
Отредактированно zvv1992 (15.12.2011 01:57:13)
Неактивен
Спасибо большое за помощь!!!
И так...
Новая проблемка
Пишу на php запрос для БД.
Идея такая:
Имеется 3 таблицы:
1. Таблица новостей.
2. комментарии.
3.связующая. (2 поля - idновости, idкомментария).
Сделать выборку комментариев для новости. Желательно выборка с использованием php, а не только sql.
Пытался сделать так:
* выборка по связующей таблице по idновости - на выходе получается, скажем, 3 поля.
idNum
1
3
4
* создать массив из этих чисел - этот шаг я и не осуществил
* выборка из таблицы комментариев по idкомментария
Врятли нужно, но:
$com_id_query = "SELECT `idCom` FROM `commentnews` WHERE `idNum` = '$id'";
$com_id_result = mysql_query($com_id_query);
$com_id_row = mysql_fetch_row($com_id_result);//достает строку,а не столбик
$com_rows = mysql_num_rows($com_id_result);
for($j = 0;$j < $com_rows;$j++)
{
$com_query = "SELECT `date-time`, `nick`, `email`, `comment` FROM `comments` WHERE `id`='$com_id_row[$j]'";
$com_row = mysql_fetch_row(mysql_query($com_query));
echo <<<_END
<tr>
<td colspan="2">$com_row[0]</td>
</tr>
<tr>
<td>$com_row[1]</td>
<td>$com_row[2]</td>
</tr>
<tr>
<td colspan="2">$com_row[3]</td>
</tr>
</table>
_END;
}
Неактивен
zvv1992 написал:
Сделать выборку комментариев для новости. Желательно выборка с использованием php, а не только sql.
Что Вы имели эти в виду?
Сразу возникает вопрос - зачем Вы заводили таблицу связей новостей и комментариев? Ведь каждый комментарий относится только к одной новости - не проще ли было просто из таблицы комментариев сделать ссылку на таблицу новостей?
zvv1992 написал:
$com_id_row = mysql_fetch_row($com_id_result);//достает строку,а не столбик
Данные в принципе можно извлекать только строчно.
С Вашей структурой, думаю, лучше как-то так написать:
Неактивен
Ох...совсем заработался )
И вправду зачем мне связующая таблица.
Вобщем таблицы оставил две, и вот результат:
Отредактированно zvv1992 (06.12.2011 17:04:09)
Неактивен
Да, выглядит правдодобно. Пожалуйста . И не забывайте синтаксисом подсвечивать код .
Неактивен
Вот и новая проблема....сдаю БД.
Задача:
создать функцию, выводящую среднее значение по всем полям, не испоьлзуюя функцию AVG.
Моя версия выдает ошибку:
Отредактированно zvv1992 (07.12.2011 12:44:11)
Неактивен
Изменил функцию:
Отредактированно zvv1992 (07.12.2011 13:13:07)
Неактивен
Верная версия и остальные запросы:
процедура добавляет 100 записей в таблицу/
функция находит стреднее, не используя avg
триггер выводит фукцию при любом добавлении данных в таблицу.
Отредактированно zvv1992 (15.12.2011 01:59:47)
Неактивен