[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Может ли COUNT(*) выдать 0 ?
Lightt
Есть несколько запросов -

//вывод всех исполнителей
$ispol = mysql_query('SELECT
order_user.id,
t1.FIO AS order_ispolnitel
FROM
order_user
LEFT JOIN client t1 ON t1.id = order_user.id_executors
GROUP BY
id_executors'
);
while ($allispol[] = mysql_fetch_assoc($ispol)) {}


//подсчет общих поручений
$order = mysql_query("SELECT
order_user.id,
id_executors, COUNT(id) AS couid
FROM
order_user
GROUP BY
id_executors"
);
while ($allorder[] = mysql_fetch_assoc($order)) {}

//подсчет выполненных поручений
$orderyes = mysql_query("SELECT
order_user.id,
id_executors, COUNT(id) AS couid
FROM
order_user
WHERE Result LIKE 'NO'
GROUP BY
id_executors"
);
while ($allorderyes[] = mysql_fetch_assoc($orderyes)) {}


Вывожу это все в таблице вот так -
<td>
<?php foreach($allispol AS $order_user) if(isset($order_user['id'])): ?>
<b><?php echo $order_user['order_ispolnitel']?></b> <br>
<?php endif; ?>
</td>

<
td>
<?php foreach($allorder AS $order_user): if(isset($order_user['id'])): ?>
имеет <b><?php echo $order_user['couid'];?></b> поручений <br>
<?php endif; endforeach;?>
</td>

<
td>
<?php foreach($allorderno AS $order_user): if(isset($order_user['id'])): ?>
<b><?php echo $order_user['couid'];?></b> не выполненно <br>
<?php endif; endforeach;?>
</td>


Проблема в том что при подсчете COUNT не выдает 0 и если исполнитель не имеет не выполненных поручений, таблица сбивается... выводится вот так -

Клепинин А.В. имеет 5 поручений 1 не выполненно
Фатхуллин В.Н. имеет 4 поручений
Коллесников В.А. имеет 1 поручений
Шушканов А.О. имеет 1 поручений

Хотя дожен выводить так -

Клепинин А.В. имеет 5 поручений 0 не выполненно
Фатхуллин В.Н. имеет 4 поручений 1 не выполненно
Коллесников В.А. имеет 1 поручений 0 не выполненно
Шушканов А.О. имеет 1 поручений 0 не выполненно

Подскажите пожалуйста как это можно исправить? =)





Спустя 1 час, 4 минуты, 52 секунды (26.05.2011 - 21:05) Lightt написал(а):
Такой вариант пробовал. Не получается.

Спустя 1 час, 29 минут, 35 секунд (26.05.2011 - 22:35) Snus написал(а):
$query = "
SELECT
a.id, a.id_executors, COUNT(a.id) AS `couid`, b.FIO AS `order_ispolnitel`, COUNT(c.id) AS `couid2`
FROM
`order_user` AS `a`
LEFT JOIN
`client` AS `b`
ON b.id = a.id_executors
LEFT JOIN
`order_user` AS `c`
ON c.id_executors = a.id_executors
AND c.Result = 'NO'
GROUP BY
a.id_executors"
;

$sql = mysql_query($query) or die(mysql_error());
while ( $row = mysql_fetch_assoc($sql) )
$allorder[] = $row;

echo '<pre>';
print_r($allorder);
echo '</pre>';

Спустя 35 минут, 6 секунд (26.05.2011 - 23:10) Lightt написал(а):
Snus
Спасибо =) о_О и как это у вас только получается... я несколько часов провозился, и только больше запутался xD практиковаться и практиковаться еще =)

Запрос действительно выводит 0. Только теперь не правильно подсчитывает количество полей.

На
AND c.Result = 'NO'  

0 высчитываются верно, а вот где NO встречается пишет 4, хотя должно быть 1
На
AND c.Result = 'YES'  

0 опять же правильный,а вот остальное он кажется берет из `couid`

по идеи должен выводить вот так -
couid YES NO ""
12____2__0__4
4_____1__1__2
1_____0__0__1
1_____1__0__0
а выводит вот так =)
couid YES NO ""
12____12_0__24
4_____4__4__8
1_____0__0__1
1_____1__0__0

Спустя 9 минут, 34 секунды (26.05.2011 - 23:19) Snus написал(а):
Дай дамп своей таблицы order_user

Спустя 7 минут, 50 секунд (26.05.2011 - 23:27) Lightt написал(а):
-- phpMyAdmin SQL Dump
-- version 3.2.0.1
-- http://www.phpmyadmin.net
--
-- Хост: localhost
-- Время создания: Май 26 2011 г., 21:26
-- Версия сервера: 5.1.36
-- Версия PHP: 5.3.0

SET SQL_MODE=
"NO_AUTO_VALUE_ON_ZERO";

--
-- База данных: `mistery`
--

-- --------------------------------------------------------

--
-- Структура таблицы `order_user`
--

CREATE TABLE IF NOT EXISTS `order_user` (
`id` int(44) NOT NULL AUTO_INCREMENT,
`Percent` varchar(44) NOT NULL,
`Place_in_archive` varchar(44) NOT NULL,
`date_in_archive` date NOT NULL,
`Result` varchar(44) NOT NULL,
`data_in_Result` date NOT NULL,
`id_orders` int(44) NOT NULL,
`id_curators` int(44) NOT NULL,
`id_executors` int(44) NOT NULL,
`id_comments` int(22) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=225 ;

--
-- Дамп данных таблицы `order_user`
--

INSERT INTO `order_user` (`id`, `Percent`, `Place_in_archive`, `date_in_archive`, `Result`, `data_in_Result`, `id_orders`, `id_curators`, `id_executors`, `id_comments`) VALUES
(150, '10', '', '0000-00-00', '', '0000-00-00', 218, 0, 6, 0),
(149, '55', '', '0000-00-00', '', '0000-00-00', 217, 15, 12, 31),
(148, '32', '', '0000-00-00', '', '0000-00-00', 216, 15, 6, 30),
(147, '22', '', '0000-00-00', '', '0000-00-00', 215, 15, 6, 29),
(151, '22', '', '0000-00-00', '', '0000-00-00', 219, 0, 12, 0),
(222, '0', 'NO', '0000-00-00', '', '0000-00-00', 263, 0, 13, 52),
(221, '60', 'NO', '0000-00-00', 'NO', '0000-00-00', 262, 15, 12, 51),
(220, '100', 'NO', '0000-00-00', 'YES', '2011-05-24', 261, 1, 6, 50),
(219, '100', 'NO', '0000-00-00', 'YES', '2011-05-25', 260, 12, 26, 49),
(218, '100', 'NO', '0000-00-00', 'YES', '0000-00-00', 259, 15, 12, 48),
(223, '0', 'NO', '0000-00-00', 'YES', '0000-00-00', 264, 15, 6, 53),
(224, '0', 'NO', '0000-00-00', '', '0000-00-00', 265, 0, 6, 54);


Спустя 11 часов, 12 минут, 12 секунд (27.05.2011 - 10:39) Snus написал(а):
$query = "
SELECT
a.id, a.id_executors,
COUNT(a.id) AS `couid`,
b.FIO AS `order_ispolnitel`,
( SELECT COUNT(*) FROM `order_user` WHERE `id_executors` = a.id_executors AND `Result` = 'NO' ) AS `couid2`
FROM
`order_user` AS `a`
LEFT JOIN
`client` AS `b`
ON b.id = a.id_executors
GROUP BY
a.id_executors"
;

$sql = mysql_query($query) or die(mysql_error());
while ( $row = mysql_fetch_assoc($sql) )
$allorder[] = $row;

echo '<pre>';
print_r($allorder);
echo '</pre>';

Спустя 3 часа, 33 минуты, 27 секунд (27.05.2011 - 14:13) Lightt написал(а):
Спасибо большое =) как раз то что нужно =)
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.