[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Как дополнить запрос через in
Lightt
Здраствуйте =) подскажите пожалуйста...

Есть 2 таблицы.
orders и order_user

Есть запрос -
SELECT
COUNT(a.id) AS allcol,
client.FIO,
orders.data_order,

(
SELECT
COUNT(*)
FROM
order_user
WHERE
id_executors = a.id_executors AND Result = "no"
) AS alssno

FROM
order_user as a
LEFT JOIN client on client.id = a.id_executors
left join orders on orders.id = a.id_orders

GROUP BY
a.id_executors


Он работает =)
Подсчитывает все поля id_executors которые с Result = "no"
Но теперь мне надо еще выбрать это все по дате.

Пробовал вот такой запрос -

  (SELECT 
COUNT(*)
FROM
order_user
WHERE
id_executors = a.id_executors AND Result = "no" in
(SELECT
COUNT(*)
FROM
orders
WHERE
data_order = "2011-05-23"
)
)
AS alssno

Но это не срабатывает... так как нет условия
 id_executors = a.id_executors 

А поставить его не могу т.к. это поле в другой таблице... как это можно обойти?



Спустя 1 час, 40 минут, 31 секунда (29.05.2011 - 20:40) Renden написал(а):
Может так?)

SELECT
COUNT(a.id) AS allcol,
client.FIO,
orders.data_order,

(
SELECT
COUNT(*)
FROM
order_user
WHERE
id_executors = a.id_executors AND Result = "no"
) AS alssno

FROM
order_user as a
LEFT JOIN client on client.id = a.id_executors
LEFT JOIN orders on orders.id = a.id_orders AND a.data_order = '2011-05-23'

GROUP BY
a.id_executors

Спустя 5 минут, 31 секунда (29.05.2011 - 20:46) Lightt написал(а):
нет, не работает.. выдает ошибку

Спустя 1 минута, 50 секунд (29.05.2011 - 20:48) Renden написал(а):
Lightt
Какую? У тя data_order в какой таблице? Мб в orders? Тогда пропиши заместо a.data_order = '2011-05-23' вот это orders.data_order = '2011-05-23'

Спустя 10 минут, 1 секунда (29.05.2011 - 20:58) Lightt написал(а):
да data_order находится в orders =)
Теперь ошибку не выдает, но и не считает... что с этим условием, что без него выдает одно и то же...

Спустя 4 часа, 16 минут, 25 секунд (30.05.2011 - 01:14) inpost написал(а):
Lightt
Перед условием добавь первый select, полученные значения отправь в переменную, далее по коду сравнивай ту строчку с переменной.

Хотя... зачем такое мудрить, не легче отдельными запросами всё написать? К тому же у тебя там COUNT считает лишь один раз и возвращает лишь 1 число.

А ещё, скинь дамб своих таблиц и четко сформулируй, какие данные ты хочешь достать из таблиц в каком порядке. Ато ничего не понятно.

Или куда проще, в первый запрос выборку по дате добавь лишь, зачем сравнение выносить, если первый запрос успешно работал?

Спустя 10 минут, 44 секунды (30.05.2011 - 01:25) Lightt написал(а):
-- phpMyAdmin SQL Dump
-- version 3.2.0.1
-- http://www.phpmyadmin.net
--
-- Хост: localhost
-- Время создания: Май 29 2011 г., 23:17
-- Версия сервера: 5.1.36
-- Версия PHP: 5.3.0

SET SQL_MODE=
"NO_AUTO_VALUE_ON_ZERO";

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

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

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

CREATE TABLE IF NOT EXISTS `orders` (
`id` int(33) NOT NULL AUTO_INCREMENT,
`data_order` date NOT NULL,
`Performance` date NOT NULL,
`name_orders` varchar(1000) NOT NULL,
`id_period` int(33) NOT NULL,
`id_priority` int(33) NOT NULL,
`id_autor` int(33) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=266 ;

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

INSERT INTO `orders` (`id`, `data_order`, `Performance`, `name_orders`, `id_period`, `id_priority`, `id_autor`) VALUES
(218, '2011-05-22', '2011-05-30', 'Обжать кабель', 1, 3, 26),
(217, '2011-05-22', '2011-05-25', 'Купи 5 флешек фирмы сони', 1, 2, 14),
(216, '2011-05-22', '2011-05-24', 'Перезагрузи сервер', 1, 1, 14),
(215, '2011-05-22', '2011-05-25', 'Закупи картриджи на принтер', 1, 2, 14),
(219, '2011-05-22', '2011-05-24', 'Переустановить винду в 404', 1, 2, 6),
(261, '2011-05-23', '2011-08-05', 'Купить 5 лицензий на Касперского', 1, 1, 14),
(263, '2011-05-23', '2011-05-30', 'Протянуть сеть на первом этаже', 1, 1, 14),
(262, '2011-05-23', '2011-05-25', 'Закупить GPRS оборудование', 1, 2, 14),
(259, '2011-05-23', '2011-05-28', 'Заменить монитор в 411 кабинете', 1, 2, 14),
(260, '2011-05-24', '2011-06-17', 'Доработать CSS для сайта КПСС', 1, 1, 14),
(264, '2011-05-25', '2011-05-27', 'Обновить базу', 1, 1, 6),
(265, '2011-05-26', '2011-05-31', 'Занести клиентов в базу', 1, 3, 15);



-- phpMyAdmin SQL Dump
-- version 3.2.0.1
-- http://www.phpmyadmin.net
--
-- Хост: localhost
-- Время создания: Май 29 2011 г., 23:17
-- Версия сервера: 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, '50', '', '0000-00-00', '', '0000-00-00', 218, 0, 12, 0),
(149, '33', '', '0000-00-00', '', '0000-00-00', 217, 26, 12, 31),
(148, '', '', '0000-00-00', '', '0000-00-00', 216, 15, 6, 30),
(147, '', '', '0000-00-00', '', '0000-00-00', 215, 15, 6, 29),
(151, '99', '', '0000-00-00', '', '0000-00-00', 219, 0, 12, 0),
(222, '99', 'NO', '0000-00-00', '', '0000-00-00', 263, 0, 13, 52),
(221, '99', 'NO', '0000-00-00', 'NO', '0000-00-00', 262, 15, 12, 51),
(220, '55', 'NO', '0000-00-00', 'YES', '2011-05-24', 261, 1, 6, 50),
(219, '99', 'NO', '0000-00-00', 'YES', '2011-05-25', 260, 12, 26, 49),
(218, '99', 'NO', '0000-00-00', 'YES', '0000-00-00', 259, 15, 12, 48),
(223, '55', 'NO', '0000-00-00', 'YES', '0000-00-00', 264, 15, 12, 53),
(224, '100', 'NO', '0000-00-00', '', '0000-00-00', 265, 0, 13, 54);



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

Конкретно хочу вывести -
В период c 2011-04-29 по 2011-05-29
С % выполнения от 10 до 100
Клепинин А.В. имеет 3 поручения из них 0 не выполненных 1 выполненных 2 текущих

Проблема в том что дату надо брать из другой таблицы - orders поле - data_order

Так с % я разобрался, просто в эту строчку добавляется -
WHERE
id_executors = a.id_executors AND Result = "no" and Percent >= 10

А вот дата наотрез отказывается работать =)

Спустя 20 минут, 2 секунды (30.05.2011 - 01:45) PandoraBox2007 написал(а):
по логике вроде так

SELECT
COUNT(ord_user.id) AS allcol,
cl.FIO,
ord.data_order,
(
SELECT COUNT(id) FROM order_user WHERE id_executors = ord_user.id_executors AND Result = "no") AS alssno

FROM
order_user AS ord_user

LEFT JOIN client AS cl ON (cl.id = ord_user.id_executors)
LEFT JOIN orders AS ord ON (ord.id = ord_user.id_orders)

WHERE
id_executors = ord_user.id_executors
AND Result = "no"
AND Percent >= 10
AND data_order BETWEEN '2011-04-29' AND '2011-05-29'

GROUP BY
ord_user.id_executors


тип данных Result не оптимален, тут подойдет tinyint (0 - false, 1 - true)
с поиском теста в базе поднимается ресурсоемкость, цифры намного быстрее отсеивать

Спустя 14 минут, 5 секунд (30.05.2011 - 01:59) Lightt написал(а):
PandoraBox2007

Спасибо =) но это немного не то...
проблема состояла в том чтобы вывести всех уникальных клиентов, и подсчитать сколько у них поручений с отметкой - no...
Но сейчас он выводит только конкретного id_executors
Т.е.
на такой запрос, он должен выдать -

SELECT
order_user.Result, order_user.id_executors, orders.data_order, order_user.Percent,
client.FIO
FROM
order_user
LEFT JOIN orders ON orders.id = id_orders
LEFT JOIN client ON client.id = id_executors
WHERE
Result = "no" AND data_order = "2011-05-23" AND Percent >= "90"

на дату 2011-05-23 с процентом >=90

12 имеет 0 поручения из них 0 не выполненных 0 выполненных 0текущих
6 имеет 1 поручения из них 1 не выполненных 0 выполненных 0текущих
13 имеет 0 поручения из них 0 не выполненных 0 выполненных 0текущих
26 имеет 0 поручения из них 0 не выполненных 0 выполненных 0текущих

Спустя 3 минуты, 15 секунд (30.05.2011 - 02:02) PandoraBox2007 написал(а):
таблицу структуры клиентов вы не кидали

Спустя 2 минуты, 37 секунд (30.05.2011 - 02:05) PandoraBox2007 написал(а):
если вы хотите использовать для result текст тогда можно заюзать тип данных enum создается константа и ее значение выглядит индетично но ресурсоемкость падает из за отсутсвия в строках этой колонки теста

Спустя 6 минут, 27 секунд (30.05.2011 - 02:11) Lightt написал(а):
С клиентов берется только имя... не знаю имеет смысл её вообще кидать?
Просто приведенный пример в первом посте, работает как нужно, только не выводит дату... я думал что можно её как нибудь от туда подцепить как например
Percent >= "90" еще каким нибудь условием.

Или же разбить на несколько запросов как предлагал inpost но как именно это сделать я не понимаю, много чего уже перепробовал =(

Спустя 1 минута, 1 секунда (30.05.2011 - 02:12) PandoraBox2007 написал(а):
кинь еще клиентов, не хочется разирать твою архитектуру зависимостей таблиц

Спустя 6 минут, 13 секунд (30.05.2011 - 02:19) Lightt написал(а):
Пожалуйста =)

-- phpMyAdmin SQL Dump
-- version 3.2.0.1
-- http://www.phpmyadmin.net
--
-- Хост: localhost
-- Время создания: Май 30 2011 г., 00:18
-- Версия сервера: 5.1.36
-- Версия PHP: 5.3.0

SET SQL_MODE=
"NO_AUTO_VALUE_ON_ZERO";

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

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

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

CREATE TABLE IF NOT EXISTS `client` (
`id` int(100) NOT NULL AUTO_INCREMENT,
`FIO` varchar(1000) NOT NULL,
`Login` varchar(1000) NOT NULL,
`Post_user` varchar(1000) NOT NULL,
`Mail` varchar(1000) NOT NULL,
`Password` varchar(1000) NOT NULL,
`Groupi` int(11) NOT NULL,
`Block_user` varchar(1000) NOT NULL,
`Message_mail` varchar(1000) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=27 ;

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

INSERT INTO `client` (`id`, `FIO`, `Login`, `Post_user`, `Mail`, `Password`, `Groupi`, `Block_user`, `Message_mail`) VALUES
(1, 'Михайлов И.В.', 'Administrator', 'Администратор', 'Admin@ya.ru', 'Admin', 3, 'Нет', 'Нет'),
(6, 'Клепинин А.В.', 'Клепинин А.В.', 'Программист', 'Klepa@ya.ru', '111', 2, 'Нет', 'Нет'),
(12, 'Фатхуллин В.Н.', 'Фатхуллин В.Н.', 'Программист', 'fathul@ya.ru', '111', 2, 'Нет', 'Нет'),
(14, 'Чащин С.А.', 'Чащин С.А.', 'Директор', 'Chashin@ya.ru', '111', 4, 'Нет', 'Нет'),
(13, 'Коллесников В.А.', 'vita', 'Менеджер по продажам', 'vita@ya.ru', '111', 1, 'Нет', 'Да'),
(15, 'Колесник А.И.', 'Leksy', 'Зам. Директора', 'Leksy@ya.ru', '111', 4, 'Нет', 'Нет'),
(26, 'Шушканов А.О.', 'Шушканов А.О.', 'Программист', 'shuskan@ya.ru', '111', 2, 'Нет', 'Нет');

Быстрый ответ:

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