Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / count и два LEFT JOIN / 17 сообщений из 17, страница 1 из 1
17.10.2013, 21:09:40
    #38431956
mailmoney
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
count и два LEFT JOIN
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
'SELECT 
student.*, 
count(doklady.id_doklady) as doklady_count,
count(konf.id_konf) as konf_count 

FROM #__asm_student as student

LEFT JOIN #__asm_doklady as doklady ON (student.id=doklady.id_student)
LEFT JOIN #__asm_konf as konf ON (student.id=konf.id_studentkonf)

GROUP BY student.id';



Работает запрос, но второй count больше первого, то проставит в оба большее значение. Помогите очень срочно нужно.
...
Рейтинг: 0 / 0
17.10.2013, 21:19:01
    #38431971
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
count и два LEFT JOIN
Группировка - "ниачём". Впрочем, если student.id - UNIQUE, то нестрашно.
mailmoneyРаботает запрос, но второй count больше первого, то проставит в оба большее значение.Эмм... а теперь то же, но по-русски, пожалуйста.
...
Рейтинг: 0 / 0
17.10.2013, 21:22:36
    #38431977
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
count и два LEFT JOIN
Впрочем, если моё кунг-фу телепатия меня не подводит, то будет что-то типа

Код: sql
1.
2.
3.
4.
5.
6.
7.
SELECT student.*, 
GREATEST(count(doklady.id_doklady),count(konf.id_konf)) as doklady_count,
count(konf.id_konf) as konf_count 
FROM #__asm_student as student
LEFT JOIN #__asm_doklady as doklady ON (student.id=doklady.id_student)
LEFT JOIN #__asm_konf as konf ON (student.id=konf.id_studentkonf)
GROUP BY student.id
...
Рейтинг: 0 / 0
17.10.2013, 21:28:10
    #38431989
mailmoney
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
count и два LEFT JOIN
проверил, этот запрос их вообще уровнял.

Мой вариант выдачи (в моем эти цифры не равны, но он берет по большему значению)


Ваш запрос
...
Рейтинг: 0 / 0
17.10.2013, 21:37:16
    #38431998
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
count и два LEFT JOIN
Да я вообще не понял, что нужно - о чём честно сказал... так что имею полное право попадать пальцем в небо.
...
Рейтинг: 0 / 0
17.10.2013, 21:41:13
    #38432010
mailmoney
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
count и два LEFT JOIN
Сейчас...
в данной ситуации 3 таблицы.
1 - #__asm_student id (автоинкремент), и др поля,
2. #__asm_doklady id, id_student
3. #__asm_konf id, id_studentkonf

нужно подсчитать, сколько записей имеется во 2 и 3 таблице для студентов из 1.
таблиц 2-3 намного больше, но это для примера.
...
Рейтинг: 0 / 0
17.10.2013, 21:49:16
    #38432019
mailmoney
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
count и два LEFT JOIN
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
CREATE TABLE `lg5kt_asm_student` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `fakultet` varchar(255) DEFAULT NULL,
  `kurs` varchar(255) DEFAULT NULL,
  `gruppa` varchar(255) DEFAULT NULL,
  `fio` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;
INSERT INTO `lg5kt_asm_student` VALUES (1,'ФИТ','3','10-ОЗИ','Иванов Антон Петрович');
INSERT INTO `lg5kt_asm_student` VALUES (2,'ФИТ','4','11-ОЗИ','Петров Иван Антонович');
INSERT INTO `lg5kt_asm_student` VALUES (3,'МТФ','3','iuiyuiui','yuiyuiyui');
INSERT INTO `lg5kt_asm_student` VALUES (4,'МТФ','6','5050','055050');
INSERT INTO `lg5kt_asm_student` VALUES (5,'МТФ','1','1010','1010');

CREATE TABLE `lg5kt_asm_doklady` (
  `id_doklady` int(11) NOT NULL AUTO_INCREMENT,
  `id_student` varchar(255) DEFAULT NULL,
  `vid` varchar(255) DEFAULT NULL,
  `strana` varchar(255) DEFAULT NULL,
  `name` varchar(255) DEFAULT NULL,
  `vyhodnie` varchar(255) DEFAULT NULL,
  `sredstv` varchar(255) DEFAULT NULL,
  `kopiya` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id_doklady`)
) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
INSERT INTO `lg5kt_asm_doklady` VALUES (1,'1','asd','asd','asd','asd','asdasd','asd');
INSERT INTO `lg5kt_asm_doklady` VALUES (2,'1','123',NULL,NULL,NULL,NULL,NULL);
INSERT INTO `lg5kt_asm_doklady` VALUES (3,'4','456','456',NULL,NULL,NULL,NULL);

CREATE TABLE `lg5kt_asm_konf` (
  `id_konf` int(11) NOT NULL AUTO_INCREMENT,
  `id_studentkonf` varchar(255) DEFAULT NULL,
  `vid_konf` varchar(255) DEFAULT NULL,
  `date_konf` date DEFAULT NULL,
  `name_konf` varchar(255) DEFAULT NULL,
  `sredstv_konf` varchar(255) DEFAULT NULL,
  `kopiya_konf` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id_konf`)
) ENGINE=MyISAM AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;
INSERT INTO `lg5kt_asm_konf` VALUES (1,'1',NULL,NULL,NULL,NULL,NULL);
INSERT INTO `lg5kt_asm_konf` VALUES (2,'2',NULL,NULL,NULL,NULL,NULL);
INSERT INTO `lg5kt_asm_konf` VALUES (3,'4',NULL,NULL,NULL,NULL,NULL);
INSERT INTO `lg5kt_asm_konf` VALUES (4,'4',NULL,NULL,NULL,NULL,NULL);
INSERT INTO `lg5kt_asm_konf` VALUES (5,'4',NULL,NULL,NULL,NULL,NULL);
...
Рейтинг: 0 / 0
17.10.2013, 22:06:12
    #38432038
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
count и два LEFT JOIN
Не, а что не устраивало-то в исходном запросе?
...
Рейтинг: 0 / 0
17.10.2013, 22:09:21
    #38432041
mailmoney
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
count и два LEFT JOIN
по фото 1 (мой запрос),
допустим у 4 студента кол-во докладов=3, а участия в конференциях=1 - то он и то и то пишет 3.
если наоборот - то правильно, например кол-во докладов=1, а участия в конференциях=3 - то напишет верно, но ведь не всегда первый столбец будет меньше второго.
...
Рейтинг: 0 / 0
17.10.2013, 22:29:15
    #38432064
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
count и два LEFT JOIN
Код: sql
1.
2.
3.
4.
5.
6.
7.
SELECT student.*, 
count(doklady.id_doklady) as doklady_count,
GREATEST(count(doklady.id_doklady),count(konf.id_konf)) as konf_count 
FROM #__asm_student as student
LEFT JOIN #__asm_doklady as doklady ON (student.id=doklady.id_student)
LEFT JOIN #__asm_konf as konf ON (student.id=konf.id_studentkonf)
GROUP BY student.id

Так?

Если да - то ты проявил просто чудеса тупости...
...
Рейтинг: 0 / 0
18.10.2013, 03:06:50
    #38432186
Cygapb-007
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
count и два LEFT JOIN
тоже предложу вариант
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SELECT student.*, 
  (select count(distinct doklady.id_doklady) 
    from #__asm_doklady as doklady 
    where doklady.id_student=student.id
  ) as doklady_count,
  (select count(distinct konf.id_konf)
    from #__asm_konf as konf 
    where konf.id_studentkonf=student.id
  ) as konf_count 
FROM #__asm_student as student
...
Рейтинг: 0 / 0
18.10.2013, 05:34:29
    #38432201
mailmoney
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
count и два LEFT JOIN
[quot Akina]
Код: sql
1.
2.
3.
4.
5.
6.
7.
SELECT student.*, 
count(doklady.id_doklady) as doklady_count,
GREATEST(count(doklady.id_doklady),count(konf.id_konf)) as konf_count 
FROM #__asm_student as student
LEFT JOIN #__asm_doklady as doklady ON (student.id=doklady.id_student)
LEFT JOIN #__asm_konf as konf ON (student.id=konf.id_studentkonf)
GROUP BY student.id

Так?

не хочет отрабатывать, пишет всё болшое значение, того или того.


Cygapb-007тоже предложу вариант
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SELECT student.*, 
  (select count(distinct doklady.id_doklady) 
    from #__asm_doklady as doklady 
    where doklady.id_student=student.id
  ) as doklady_count,
  (select count(distinct konf.id_konf)
    from #__asm_konf as konf 
    where konf.id_studentkonf=student.id
  ) as konf_count 
FROM #__asm_student as student



а это сработало. в чем же загвоздка у left join.. не знаю, еще подумаю, если нет, то прийдется так и писать дальше. про нагрузку даже не знаю что будет лучше, там около 12 таблиц еще присоединяться будет.
...
Рейтинг: 0 / 0
18.10.2013, 07:00:58
    #38432221
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
count и два LEFT JOIN
mailmoneyа это сработало. в чем же загвоздка у left joinВ том, что вы не понимаете, как он работает.
t1:id12t2:id1a1213210t3:id1a1100120025002600
t1 join t2:t1_at2_idt2_a1121132210
t1 join t2 join t3:t1_at2_idt2_at3_idt3_a11211001131100112120011312002210250022102600
Обратите внимание на первые 4 строки в последнем результате.
...
Рейтинг: 0 / 0
18.10.2013, 14:03:49
    #38432855
mailmoney
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
count и два LEFT JOIN
Cygapb-007тоже предложу вариант
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SELECT student.*, 
  (select count(distinct doklady.id_doklady) 
    from #__asm_doklady as doklady 
    where doklady.id_student=student.id
  ) as doklady_count,
  (select count(distinct konf.id_konf)
    from #__asm_konf as konf 
    where konf.id_studentkonf=student.id
  ) as konf_count 
FROM #__asm_student as student



а скажите, тут есть ограничения, или опять что то я туплю, сделал 5 таких внутренних селектов, а 6-ой уже не хочет, пишет ошибка.
...
Рейтинг: 0 / 0
18.10.2013, 14:21:00
    #38432893
mailmoney
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
count и два LEFT JOIN
извините, да это я где то в БД что то упустил, сейчас буду разбираться в таблицах. проверил дальше, работает всё.
...
Рейтинг: 0 / 0
18.10.2013, 14:22:16
    #38432896
Cygapb-007
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
count и два LEFT JOIN
mailmoneyCygapb-007тоже предложу вариант
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SELECT student.*, 
  (select count(distinct doklady.id_doklady) 
    from #__asm_doklady as doklady 
    where doklady.id_student=student.id
  ) as doklady_count,
  (select count(distinct konf.id_konf)
    from #__asm_konf as konf 
    where konf.id_studentkonf=student.id
  ) as konf_count 
FROM #__asm_student as student



а скажите, тут есть ограничения, или опять что то я туплю, сделал 5 таких внутренних селектов, а 6-ой уже не хочет, пишет ошибка.Можно же и по-другому...
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
SELECT 
    student.*, 
    doklady.doklady_count, 
    konf.konf_count
FROM #__asm_student as student
LEFT JOIN   (
    select 
        doklady.id_student, 
        count(distinct doklady.id_doklady) as doklady_count
    from #__asm_doklady as doklady 
    group by doklady.id_student
  ) as doklady on doklady.id_student=student.id
LEFT JOIN (
    select 
        konf.id_studentkonf, 
        count(distinct konf.id_konf)as konf_count 
    from #__asm_konf as konf 
    group by konf.id_studentkonf
  ) as konf on konf.id_studentkonf=student.id;
...
Рейтинг: 0 / 0
18.10.2013, 14:43:46
    #38432928
mailmoney
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
count и два LEFT JOIN
да всё спасибо, уже совсем нет времени переделывать, написал всё. главное ошибка сейчас была в ступор вошел -
таблица #__asm_grant ну и поля аналогичные, пишет ошибка, нет полей для вывода. всё перепроверил, правильно...
переименовал в agrant0 - заработало, правда не знаю что, пробовал 3 раза обратно возращал, ошибка. тоже времени нет, да и ладно)))
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / count и два LEFT JOIN / 17 сообщений из 17, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]