Новости
Документация
Download
Webboard
Поиск
FAQ/ЧаВо
Обратная связь




MySQL.RU - Webboard



Вернуться
Помогите с непростым запросом (KnalB) 15/04/2011 - 17:46:10
      Re: Помогите с непростым запросом (Akina) 15/04/2011 - 21:57:10
      Re: Помогите с непростым запросом (KnalB) 18/04/2011 - 14:42:40

> Original message text:
> From: KnalB - 15/04/2011 - 17:46:10
> Subject:Помогите с непростым запросом
> -----------------
> Здравствуйте!
>
> Что-то я совсем заработался, помогите составить сложный запрос.
>
> Есть ТРИ таблицы, в одной есть 100 человек, в другой 30, в третьей 110 (причем люди в них иногда пересекаются, иногда новые добавляются). У каждого человека есть СУММА ОЧКОВ.
> Надо написать запрос чтобы получилась такая выборка:
>
> Человек СУММА из первой таблицы, СУММА из второй таблицы, СУММА из третьей таблицы, ОБЩАЯ СУММА отсортированное по ОБЩАЯ СУММА.
>
> Написал как то сложно, приведу таблицы сразу понятнее станет :)
>
> Таблицы такие:
> CREATE TABLE `z`.`zd_1_stat` (
> `mk1` int(11) NOT NULL AUTO_INCREMENT,
> `points1` int(11) DEFAULT NULL,
> PRIMARY KEY (`mk1`)
> ) ENGINE=InnoDB AUTO_INCREMENT=1842 DEFAULT CHARSET=cp1251;
>
> CREATE TABLE `z`.`zd_2_res` (
> `mk2` int(11) NOT NULL AUTO_INCREMENT,
> `points2` int(11) DEFAULT NULL,
> PRIMARY KEY (`mk2`)
> ) ENGINE=InnoDB AUTO_INCREMENT=1842 DEFAULT CHARSET=cp1251;
>
> CREATE TABLE `z`.`zd_3_yes` (
> `mk3` int(11) NOT NULL AUTO_INCREMENT,
> `points3` int(11) DEFAULT NULL,
> PRIMARY KEY (`mk3`)
> ) ENGINE=InnoDB AUTO_INCREMENT=1842 DEFAULT CHARSET=cp1251;
>
> //сюда заносятся все люди, а в таблицы выше - "ключи" из этой.
> CREATE TABLE `z`.`people` (
> `mk` int(11) NOT NULL AUTO_INCREMENT,
> `FIO` varchar(20) DEFAULT NULL,
> PRIMARY KEY (`mk`)
> ) ENGINE=InnoDB AUTO_INCREMENT=1842 DEFAULT CHARSET=cp1251;
>
> на выходе надо получить:
>
> select FIO, points1, points2, points3, pointsSUMM
>
> причём строчка для FIO должна быть даже если человек один раз только "отметился", т.е. скажем в points1 и points2 - null.
>


From: KnalB - 18/04/2011 - 14:42:40
Subject:Помогите с непростым запросом
-----------------
Спасибо!

Я поражен Вашими знаниями, для меня действительно такой запрос сложноват...

Но сложность во-первых в том, что я не знал функцию coalesce.
А во-вторых я попытался упростить ситуацию, а ситуация значительно (на мой взгляд) сложнее:

есть таблица статистики:

CREATE TABLE `ez`.`zd_3_stat` (
`mk3` int(11) NOT NULL AUTO_INCREMENT,
`mk_mk1` int(11) DEFAULT NULL,
`mk_mk2` int(11) DEFAULT NULL,
`points` int(11) DEFAULT NULL,
PRIMARY KEY (`mk3`)
) ENGINE=InnoDB AUTO_INCREMENT=2458 DEFAULT CHARSET=cp1251;

таблица ФИО:

CREATE TABLE `ez`.`zd_1_fi` (
`mk1` int(11) NOT NULL AUTO_INCREMENT,
`F` varchar(20) DEFAULT NULL,
`I` varchar(20) DEFAULT NULL,
`PODR` varchar(15) DEFAULT NULL,
`POL` int(10) unsigned NOT NULL,
PRIMARY KEY (`mk1`)
) ENGINE=InnoDB AUTO_INCREMENT=578 DEFAULT CHARSET=cp1251;

и таблица чемпионатов

CREATE TABLE `ez`.`zd_2_champ` (
`mk2` int(11) NOT NULL AUTO_INCREMENT,
`NAME` varchar(100) DEFAULT NULL,
`mdate` date DEFAULT NULL,
`mdatetime` datetime NOT NULL,
`year` int(10) unsigned NOT NULL,
PRIMARY KEY (`mk2`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=25 DEFAULT CHARSET=cp1251;

а вывести надо :

select FIO, points1, points2, points3, pointsSUMM
отсортированный по наибольшему количеству pointsSUMM.

Только вот сколько будет этих points[1..3] я не знаю.

"Практически" получается что - участник регистрируется в таблице zd_1_fi, затем регистрируется чемпионат - в zd_2_champ, а результаты им показанные в таблицу zd_3_stat (используя ключ чемпионата и ключ участника), сложность в том что я не могу сказать сколько будет чемпионатов и точно знаю что участники в каких то принимают участие, а в каких то нет.

Вот. Теперь думаю сложно :( ...
Теоретически из вашего предыдущего запроса можно попробовать "вытащить" то что нужно мне средствами php написав запрос... в цикле, но тоже сложно. А запросом такое можно написать?


[Это сообщение - спам!]

Последние сообщения из форума

Уважаемые посетители форума MySQL.RU!
Убедительная просьба, прежде чем задавать свой вопрос в этом форуме, обратите внимание на разделы:
- ответы на наиболее часто задаваемые вопросы - FAQ
- раздел документация
- раздел поиск по сообщениям форума и документации
Также, старайтесь наиболее подробно указывать свою ситуацию (версию операционной системы, версию MySQL, версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
 Имя:
 E-mail:
 Тема:
 Текст:
Код подтверждения отправки: Code
38300



РЕКЛАМА НА САЙТЕ
  Создание сайтов | |