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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: несколько подсчетов количества

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
Вездеход
Отправлено: 08 Ноября, 2008 - 20:00:58
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 820
Дата рег-ции: Апр. 2008  
Откуда: Россия


Помог: 0 раз(а)




есть 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


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

зы. значения есть во всех таблицах


-----
о великий nl2br!
Хочешь невероятных ощущений? Юзай блокнот! Блокнот - чудеса сбываются!
Чем меньше вы знаете PHP - тем ценнее мои знания!
 
 Top
vitaliy_mad
Отправлено: 09 Ноября, 2008 - 00:55:56
Post Id


Участник


Покинул форум
Сообщений всего: 1107
Дата рег-ции: Окт. 2008  
Откуда: Украина, Мариуполь


Помог: 0 раз(а)




вывод в одном запросе нельзя узнать кол-во записей из нескольких таблиц...
(Добавление)
выход:

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 ведет себя точно так же....
 
 Top
Вездеход
Отправлено: 09 Ноября, 2008 - 02:44:18
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 820
Дата рег-ции: Апр. 2008  
Откуда: Россия


Помог: 0 раз(а)




vitaliy_mad пишет:
select @c1:=count(*) from table1;
select @c2:=count(*) from table2;
select @c3:=count(*) from table3;
select @c1,@c2,@c3;

а это вписывается в один запрос чтоль? оО


-----
о великий nl2br!
Хочешь невероятных ощущений? Юзай блокнот! Блокнот - чудеса сбываются!
Чем меньше вы знаете PHP - тем ценнее мои знания!
 
 Top
Ыыы
Отправлено: 09 Ноября, 2008 - 06:19:38
Post Id



Частый гость


Покинул форум
Сообщений всего: 169
Дата рег-ции: Июль 2008  
Откуда: Россия, Хабаровск


Помог: 0 раз(а)




Да, видишь, запросы разделяются точкой с запятой.
 
 Top
Champion Супермодератор
Отправлено: 09 Ноября, 2008 - 09:08:57
Post Id



Активный участник


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


Помог: 57 раз(а)




select
(select count(*) from table1) col_tab1,
(select count(*) from table2) col_tab2,
(select count(*) from table3) col_tab3,
from не_важно_откуда
 
 Top
vitaliy_mad
Отправлено: 09 Ноября, 2008 - 11:15:38
Post Id


Участник


Покинул форум
Сообщений всего: 1107
Дата рег-ции: Окт. 2008  
Откуда: Украина, Мариуполь


Помог: 0 раз(а)




Вездеход при таком коде:
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 плохо работает с вложенными запростами мой код будет выполнятся быстрее... хотя все зависит от размера таблиц....

(Отредактировано автором: 09 Ноября, 2008 - 11:16:16)

 
 Top
Вездеход
Отправлено: 09 Ноября, 2008 - 12:51:25
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 820
Дата рег-ции: Апр. 2008  
Откуда: Россия


Помог: 0 раз(а)




спасибо товарищи. пайду эксперементировать =)
а то чето делать 4 запроса только чтобы получить количество данных это жалко )


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

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


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

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

кто нибудь значет с чем это связанно? =(((

(Отредактировано автором: 09 Ноября, 2008 - 13:12:49)



-----
о великий nl2br!
Хочешь невероятных ощущений? Юзай блокнот! Блокнот - чудеса сбываются!
Чем меньше вы знаете PHP - тем ценнее мои знания!
 
 Top
Champion Супермодератор
Отправлено: 09 Ноября, 2008 - 13:13:02
Post Id



Активный участник


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


Помог: 57 раз(а)




Вездеход пишет:
проверьте версию базы
Улыбка
 
 Top
Вездеход
Отправлено: 09 Ноября, 2008 - 13:19:02
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 820
Дата рег-ции: Апр. 2008  
Откуда: Россия


Помог: 0 раз(а)




MySQL 5.0.45 ...
база на денвере. на сервере рабочем может и другая но там возможности тестить\проверять всё нету... поэтому надо чтобы тут работало =)
(Добавление)
уточнение - на сервере рабочем тоже версия базы - 5.0.Х


-----
о великий nl2br!
Хочешь невероятных ощущений? Юзай блокнот! Блокнот - чудеса сбываются!
Чем меньше вы знаете PHP - тем ценнее мои знания!
 
 Top
Champion Супермодератор
Отправлено: 09 Ноября, 2008 - 13:24:40
Post Id



Активный участник


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


Помог: 57 раз(а)




Проверил в 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 не_важно_откуда
 
 Top
Вездеход
Отправлено: 09 Ноября, 2008 - 22:03:16
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 820
Дата рег-ции: Апр. 2008  
Откуда: Россия


Помог: 0 раз(а)




буду пробовать. пасибо =)


-----
о великий nl2br!
Хочешь невероятных ощущений? Юзай блокнот! Блокнот - чудеса сбываются!
Чем меньше вы знаете PHP - тем ценнее мои знания!
 
 Top
Viper
Отправлено: 12 Июля, 2009 - 14:50:32
Post Id



Активный участник


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


Помог: 98 раз(а)




Подниму тему. А если нужно посчитать кол-во строк по разным столбцам и вывести раздельно ?

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 понять не могу, в том же столбце вообще ни одной записи нет О_о


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« SQL и Архитектура БД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB