Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: несколько подсчетов количества
Форумы портала PHP.SU » PHP » SQL и Архитектура БД » несколько подсчетов количества

Страниц (1): [1]
 

1. Вездеход - 08 Ноября, 2008 - 20:00:58 - перейти к сообщению
есть 4 таблицы. вот хочу посчитать сколько значений в каждой из них одним запросом.
написал запрос вот такой:
CODE (text):
скопировать код в буфер обмена
  1. SELECT count(d.id) c1, count(n.id) c2, count(u.id) c3, count(v.id) c4
  2. FROM `tbl1` d, `tbl2` n, `tbl3` u, `tbl4` v


но не он не срабатывает =(

выдает вот что:
CODE (text):
скопировать код в буфер обмена
  1. c1       c2      c3      c4
  2. 0       0       0       0


подскажите плз как правельно посчитать =)

зы. значения есть во всех таблицах
2. vitaliy_mad - 09 Ноября, 2008 - 00:55:56 - перейти к сообщению
вывод в одном запросе нельзя узнать кол-во записей из нескольких таблиц...
(Добавление)
выход:

CODE (text):
скопировать код в буфер обмена
  1. select @c1:=count(*) from table1;
  2. select @c2:=count(*) from table2;
  3. select @c3:=count(*) from table3;
  4. select @c1,@c2,@c3;
  5.  

(Добавление)

PS: PostgreSQL ведет себя точно так же....
3. Вездеход - 09 Ноября, 2008 - 02:44:18 - перейти к сообщению
vitaliy_mad пишет:
select @c1:=count(*) from table1;
select @c2:=count(*) from table2;
select @c3:=count(*) from table3;
select @c1,@c2,@c3;

а это вписывается в один запрос чтоль? оО
4. Ыыы - 09 Ноября, 2008 - 06:19:38 - перейти к сообщению
Да, видишь, запросы разделяются точкой с запятой.
5. Champion - 09 Ноября, 2008 - 09:08:57 - перейти к сообщению
select
(select count(*) from table1) col_tab1,
(select count(*) from table2) col_tab2,
(select count(*) from table3) col_tab3,
from не_важно_откуда
6. vitaliy_mad - 09 Ноября, 2008 - 11:15:38 - перейти к сообщению
Вездеход при таком коде:
CODE (text):
скопировать код в буфер обмена
  1.  
  2.  
  3. $q='select @c1:=count(*) from table1;
  4. select @c2:=count(*) from table2;
  5. select @c3:=count(*) from table3;
  6. select @c1,@c2,@c3;';
  7. $r=mysql_query($q);
  8.  

результат будет тот как и в примере Champion-а..
но в ввиду того что mysql плохо работает с вложенными запростами мой код будет выполнятся быстрее... хотя все зависит от размера таблиц....
7. Вездеход - 09 Ноября, 2008 - 12:51:25 - перейти к сообщению
спасибо товарищи. пайду эксперементировать =)
а то чето делать 4 запроса только чтобы получить количество данных это жалко )


(Добавление)
vitaliy_mad ваш код буду юзать )
вроде нормально работает...

Champion
а ваш код не срабатывает... говорит чатайте мануал или проверьте версию базы =)


(Добавление)
да чеж это за наказание то такое??? Огорчение Огорчение Огорчение

запрос в базе выполняется отлично. тот же самый запрос когда прогоняю через mysql_query() = не выполняется. возвращается значение - bool(false)

кто нибудь значет с чем это связанно? =(((
8. Champion - 09 Ноября, 2008 - 13:13:02 - перейти к сообщению
Вездеход пишет:
проверьте версию базы
Улыбка
9. Вездеход - 09 Ноября, 2008 - 13:19:02 - перейти к сообщению
MySQL 5.0.45 ...
база на денвере. на сервере рабочем может и другая но там возможности тестить\проверять всё нету... поэтому надо чтобы тут работало =)
(Добавление)
уточнение - на сервере рабочем тоже версия базы - 5.0.Х
10. Champion - 09 Ноября, 2008 - 13:24:40 - перейти к сообщению
Проверил в 5.0.51 - работает. В моем запросе ошибка была - запятая перед FROM. И еще first 1 надо указать(иначе количество записей будет равно количеству записей в таблице, указаной в from), а так, работает всё
select first 1
(select count(*) from table1) col_tab1,
(select count(*) from table2) col_tab2,
(select count(*) from table3) col_tab3
from не_важно_откуда
11. Вездеход - 09 Ноября, 2008 - 22:03:16 - перейти к сообщению
буду пробовать. пасибо =)
12. Viper - 12 Июля, 2009 - 14:50:32 - перейти к сообщению
Подниму тему. А если нужно посчитать кол-во строк по разным столбцам и вывести раздельно ?

CODE (text):
скопировать код в буфер обмена
  1. ga_images_frames | ga_images_posters
  2. fr_revenge_of_the_fallen.jpg |
  3. fr_revenge_of_the_fallen_1.jpg |
  4. fr_revenge_of_the_fallen_2.jpg |


CODE (text):
скопировать код в буфер обмена
  1. SELECT COUNT(DISTINCT ga_images_frames) AS num_fr, COUNT(DISTINCT ga_images_posters) AS num_ps
  2. FROM gallery
  3. WHERE ga_mid = 1


в результате 3 и 1.
откуда берется 1 понять не могу, в том же столбце вообще ни одной записи нет О_о

 

Powered by ExBB FM 1.0 RC1