Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Вложенные подзапросы: подсчет количества правильных ответов отдельных пользователей
 
 автор: enodik   (23.04.2011 в 19:41)   письмо автору
 
 

подскажите пожалуйста, как можно исправить мой запрос, чтобы было правильно:)
нужно чтобы выводилась таблица содержащая 4 поля:логин, количество правильных ответов по 1 базе данных, количество правильных ответов по второй базе данных, и итоговый результат по двум базам данных.
select distinct login, (select count(id_otv) from sessya where result='Верно') as itog, (select count(id_otv) from sessya where bd='1' and result='Верно') as bd1, (select count(id_otv) from sessya where bd='2' and result='Верно') as bd2 from sessya order by login

  Ответить  
 
 автор: cheops   (23.04.2011 в 19:50)   письмо автору
 
   для: enodik   (23.04.2011 в 19:41)
 

А что сейчас не верно работает? Что выдает следующий запрос и что он должен выдавать на самом деле?
select
  distinct login,
   (select count(id_otv) from sessya where result='Верно') as itog,
   (select count(id_otv) from sessya where bd='1' and result='Верно') as bd1,
   (select count(id_otv) from sessya where bd='2' and result='Верно') as bd2
from sessya
order by login

  Ответить  
 
 автор: enodik   (23.04.2011 в 22:05)   письмо автору
 
   для: cheops   (23.04.2011 в 19:50)
 

сейчас выдает таблицу, в которой поле логин как бы не привязано к остальным полям

  Ответить  
 
 автор: cheops   (23.04.2011 в 22:18)   письмо автору
 
   для: enodik   (23.04.2011 в 22:05)
 

Попробуйте следующий запрос
SELECT
  sessya.login AS login,
  bd1.total AS totalbd1,
  bd2.total AS totalbd2,
  (bd1.total + bd2.total) AS totalitog
FROM
  sessya
LEFT JOIN
  (SELECT login, COUNT(id_otv) AS total
  FROM sessya
  WHERE bd='1' AND
        result='Верно'
  GROUP BY login) AS bd1
USING(login)
  (SELECT login, COUNT(id_otv) AS total
  FROM sessya
  WHERE bd='2' AND
        result='Верно') AS bd2
USING(login)
ORDER BY sessya.login

  Ответить  
 
 автор: enodik   (23.04.2011 в 23:09)   письмо автору
 
   для: cheops   (23.04.2011 в 22:18)
 

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(SELECT login, COUNT(id_otv) AS total FROM sessya WHERE bd='2' AND r' at line 15

выводится такая ошибка

  Ответить  
 
 автор: cheops   (23.04.2011 в 23:33)   письмо автору
 
   для: enodik   (23.04.2011 в 23:09)
 

Исправьте запрос следующим образом
SELECT 
  sessya.login AS login, 
  bd1.total AS totalbd1, 
  bd2.total AS totalbd2, 
  (bd1.total + bd2.total) AS totalitog 
FROM 
  sessya 
LEFT JOIN 
  (SELECT login, COUNT(id_otv) AS total 
  FROM sessya 
  WHERE bd='1' AND 
        result='Верно' 
  GROUP BY login) AS bd1 
USING(login) 
LEFT JOIN 
  (SELECT login, COUNT(id_otv) AS total 
  FROM sessya 
  WHERE bd='2' AND 
        result='Верно') AS bd2 
USING(login) 
ORDER BY sessya.login

  Ответить  
 
 автор: enodik   (23.04.2011 в 23:46)   письмо автору
 
   для: cheops   (23.04.2011 в 23:33)
 

так работает, носейчас если нет верных ответов он выводи NULL, а как сделать так чтобы выводился 0?

  Ответить  
 
 автор: cheops   (24.04.2011 в 00:03)   письмо автору
 
   для: enodik   (23.04.2011 в 23:46)
 

Можно поступить следующим образом
SELECT  
  sessya.login AS login,  
  IFNULL(bd1.total, 0) AS totalbd1,  
  IFNULL(bd2.total, 0) AS totalbd2,  
  (IFNULL(bd1.total, 0) + IFNULL(bd2.total, 0)) AS totalitog  
FROM  
  sessya  
LEFT JOIN  
  (SELECT login, COUNT(id_otv) AS total  
  FROM sessya  
  WHERE bd='1' AND  
        result='Верно'  
  GROUP BY login) AS bd1  
USING(login)  
LEFT JOIN  
  (SELECT login, COUNT(id_otv) AS total  
  FROM sessya  
  WHERE bd='2' AND  
        result='Верно') AS bd2  
USING(login)  
ORDER BY sessya.login

  Ответить  
 
 автор: enodik   (24.04.2011 в 09:48)   письмо автору
 
   для: cheops   (24.04.2011 в 00:03)
 

спасибо:)

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования