powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / count и два LEFT JOIN
17 сообщений из 17, страница 1 из 1
count и два LEFT JOIN
    #38431956
mailmoney
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: 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
count и два LEFT JOIN
    #38431971
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Группировка - "ниачём". Впрочем, если student.id - UNIQUE, то нестрашно.
mailmoneyРаботает запрос, но второй count больше первого, то проставит в оба большее значение.Эмм... а теперь то же, но по-русски, пожалуйста.
...
Рейтинг: 0 / 0
count и два LEFT JOIN
    #38431977
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Впрочем, если моё кунг-фу телепатия меня не подводит, то будет что-то типа

Код: 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
count и два LEFT JOIN
    #38431989
mailmoney
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
проверил, этот запрос их вообще уровнял.

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


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

нужно подсчитать, сколько записей имеется во 2 и 3 таблице для студентов из 1.
таблиц 2-3 намного больше, но это для примера.
...
Рейтинг: 0 / 0
count и два LEFT JOIN
    #38432019
mailmoney
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: 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
count и два LEFT JOIN
    #38432038
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не, а что не устраивало-то в исходном запросе?
...
Рейтинг: 0 / 0
count и два LEFT JOIN
    #38432041
mailmoney
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
по фото 1 (мой запрос),
допустим у 4 студента кол-во докладов=3, а участия в конференциях=1 - то он и то и то пишет 3.
если наоборот - то правильно, например кол-во докладов=1, а участия в конференциях=3 - то напишет верно, но ведь не всегда первый столбец будет меньше второго.
...
Рейтинг: 0 / 0
count и два LEFT JOIN
    #38432064
Фотография 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

Так?

Если да - то ты проявил просто чудеса тупости...
...
Рейтинг: 0 / 0
count и два LEFT JOIN
    #38432186
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
...
Рейтинг: 0 / 0
count и два LEFT JOIN
    #38432201
mailmoney
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
[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
count и два LEFT JOIN
    #38432221
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
count и два LEFT JOIN
    #38432855
mailmoney
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
count и два LEFT JOIN
    #38432893
mailmoney
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
извините, да это я где то в БД что то упустил, сейчас буду разбираться в таблицах. проверил дальше, работает всё.
...
Рейтинг: 0 / 0
count и два LEFT JOIN
    #38432896
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
count и два LEFT JOIN
    #38432928
mailmoney
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
да всё спасибо, уже совсем нет времени переделывать, написал всё. главное ошибка сейчас была в ступор вошел -
таблица #__asm_grant ну и поля аналогичные, пишет ошибка, нет полей для вывода. всё перепроверил, правильно...
переименовал в agrant0 - заработало, правда не знаю что, пробовал 3 раза обратно возращал, ошибка. тоже времени нет, да и ладно)))
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / count и два LEFT JOIN
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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