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

Форум MySQL

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

 

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

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

тема: Подсчет записей из 4 таблиц для каждой записи из tb1
 
 автор: oli   (03.07.2013 в 20:59)   письмо автору
 
 

Делаю следующее, но берет только одну запись, а нужно для каждой из таблицы rieltor подсчетать кол-во записей в других таблицах.

 SELECT COUNT(u.view) as Views, idrieltor,
 
 (SELECT COUNT(idanswer) FROM rieltor_answers limit 1) as Answers,
 (SELECT COUNT(status) FROM apartaments WHERE apartaments.status = 0 ) as Closed,
 (SELECT COUNT(idrepresentative) FROM rieltor_representative WHERE idrepresentative = i.rieltor) as Agencies,
 (SELECT COUNT(i.idapartaments) FROM apartaments  where i.rieltor = u.idrieltor) as Objects
 FROM rieltor u, apartaments i

  Ответить  
 
 автор: OLi   (03.07.2013 в 21:39)   письмо автору
 
   для: oli   (03.07.2013 в 20:59)
 

Пытаюсь сделать иначе:

(SELECT idrieltor FROM rieltor) as Id
UNION
(SELECT COUNT(apartaments.idapartaments)
FROM apartaments LEFT JOIN rieltor ON apartaments.rieltor = rieltor.idrieltor) AS NotesAll
UNION 
(SELECT view FROM rieltor)
UNION
(SELECT COUNT(id) FROM rieltor_representative LEFT JOIN rieltor ON rieltor_representative.idrepresentative = rieltor.idrieltor) AS AgenciesAll
UNION
(SELECT COUNT(apartaments.idapartaments)
FROM apartaments LEFT JOIN rieltor rl ON apartaments.rieltor = rl.idrieltor AND apartaments.status = 0) AS NotesClosed

  Ответить  
 
 автор: OLi   (03.07.2013 в 21:39)   письмо автору
 
   для: OLi   (03.07.2013 в 21:39)
 

Дает такую ошибку:

#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 'as Id UNION (SELECT COUNT(apartaments.idapartaments)
 FROM apartaments LEFT JO' at line 1

Буду разбираться

  Ответить  
 
 автор: Sfinks   (03.07.2013 в 23:26)   письмо автору
 
   для: OLi   (03.07.2013 в 21:39)
 

У таблиц объединяемых UNION'ом алиасов не бывает

  Ответить  
 
 автор: Sfinks   (03.07.2013 в 23:24)   письмо автору
 
   для: oli   (03.07.2013 в 20:59)
 

А зачем вы запихиваете 5 не связанных запросов в 1?
Все чего вы этим добиваетесь - это ошибки и абсолютная нечитаемость запроса!

У вас большие таблицы? Вы можете вручную пересчитать значения, которые выбираете? Я вам гарантирую, что там не те значения получаются. И не то количество раз.

Тут вообще какая-то невероятная каша. Особенно мне понравилось:
(SELECT COUNT(i.idapartaments) FROM apartaments  where i.rieltor = u.idrieltor) as Objects 
 FROM rieltor u, apartaments i
Как это?!
Подсчитать количество строк таблицы I по таблице А в которой значение из таблицы I равно значению из таблицы U....
Я вот даже не могу представить.....
Один крокодил летит на север, другой оранжевый. Сколько лет дедушке?

А вот это что?
SELECT COUNT(idanswer) FROM rieltor_answers limit 1
Зачем лимит 1? Есть другие варианты?
И зачем это вообще засунуто в подзапрос???
---------------------------------------------------------------------------------------------------------------------------
Тут 5 отдельных запросов!
1.
SELECT COUNT(view) as Views, idrieltor FROM rieltor
и то скорее всего имелось ввиду:
SELECT COUNT(view) as Views, idrieltor FROM rieltor GROUP BY idrieltor

2.
SELECT COUNT(idanswer) FROM rieltor_answers

3.
SELECT COUNT(status) FROM apartaments WHERE status = 0

4.
SELECT COUNT(idrepresentative)
FROM rieltor_representative r
JOIN apartaments a
ON r.idrepresentative = a.rieltor

А 5ый я не понимаю что должен считать.

И не нужно их объединять.

  Ответить  
 
 автор: OLi   (05.07.2013 в 01:50)   письмо автору
 
   для: Sfinks   (03.07.2013 в 23:24)
 

Мне нужно это сделать одним запросом - в этом пока трудности

  Ответить  
 
 автор: Sfinks   (05.07.2013 в 08:35)   письмо автору
 
   для: OLi   (05.07.2013 в 01:50)
 

Что значит нужно? Это учебная задача и так написано в условии?

  Ответить  
 
 автор: OLi   (06.07.2013 в 07:51)   письмо автору
 
   для: Sfinks   (05.07.2013 в 08:35)
 

В задании сказано выполнить обращение к базе одним запросом

  Ответить  
 
 автор: Sfinks   (06.07.2013 в 08:42)   письмо автору
 
   для: OLi   (06.07.2013 в 07:51)
 

Ну если "одним запросом" - это значит без возврата на клиент, то можно их объеденить UNION'ом
SELECT COUNT(view) as Views FROM rieltor
  UNION ALL
SELECT COUNT(idanswer) FROM rieltor_answers
  UNION ALL
SELECT COUNT(status) FROM apartaments WHERE status = 0
  UNION ALL
SELECT COUNT(idrepresentative)
FROM rieltor_representative r 
JOIN apartaments a 
ON r.idrepresentative = a.rieltor
  UNION ALL
-- то что вы хотели еще в 5ом запросе

  Ответить  
 
 автор: OLi   (06.07.2013 в 09:13)   письмо автору
 
   для: Sfinks   (06.07.2013 в 08:42)
 

Спасибо - в пятом запросе имелось ввиду:

SELECT COUNT( t1.idrepresentative ) AS SUM
FROM rieltor_representative t1
LEFT JOIN rieltor t2 ON t2.idrieltor = t1.idrepresentative
GROUP BY t1.idrepresentative

  Ответить  
 
 автор: OLi   (07.07.2013 в 14:32)   письмо автору
 
   для: OLi   (06.07.2013 в 09:13)
 

Получился такой запрос:

SELECT COUNT(view)AS count, idrieltor, 'views' FROM rieltor GROUP BY idrieltor
  UNION ALL 
SELECT COUNT(idanswer), idrieltor, 'answers' FROM rieltor_answers GROUP BY idrieltor
  UNION ALL 
SELECT COUNT(status), rieltor, 'closed' FROM apartaments WHERE status = 0 GROUP BY rieltoR
  UNION ALL 
SELECT COUNT(idrepresentative), idrepresentative, 'agencies' 
FROM rieltor_representative r  
JOIN apartaments a  
ON r.idrepresentative = a.rieltor


Можно как-то упростить?

  Ответить  
 
 автор: Sfinks   (08.07.2013 в 12:57)   письмо автору
 
   для: OLi   (07.07.2013 в 14:32)
 

> Получился такой запрос:
И не выдает ошибку? А должен бы....

> Можно как-то упростить?
Вроде все нормально.....

Но учтите, что такое допустимо только в учебной задаче, и только по тому, что так того требует условие.
В реальной жизни лучше выполнить 4 отдельных запроса.
Исключение составляет случай, когда у вас после выборки и юниона, на уровне СУБД происходит пост-обработка результата или сортировка.

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

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