|
|
|
Выдергивание кол-ва записей.
|
|||
|---|---|---|---|
|
#18+
Есть таблица, в которой есть поле с временем прихода на работу и временем опоздания. Можно ли выдернуть одним запросом и количество дней, и количество опозданий? Поясню: вот так я получаю количество дней, которые чувак отпахал. Код: plaintext Код: plaintext 1. Соответственно получаю я две разных таблицы. А надо одну. Как? ЗЫ: MySQL 4.0.22. Пробовал вложенным запросом. Не схавал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.06.2005, 10:53 |
|
||
|
Выдергивание кол-ва записей.
|
|||
|---|---|---|---|
|
#18+
select distinct worker.sname, count(workdays.workdays_id), count(workdays.opozdanie) from workers, workdays where workers.id = workdays.man_id and workdays.opozdanie>0 or workers.id = workdays.man_id group by worker.sname; или select distinct worker.sname, count(workdays.workdays_id), count(workdays.opozdanie) from workers, workdays where workers.id = workdays.man_id and workdays.opozdanie>0 or workers.id = workdays.man_id group by worker.id; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.06.2005, 13:24 |
|
||
|
Выдергивание кол-ва записей.
|
|||
|---|---|---|---|
|
#18+
Спасибо. Смотрится очень логично. Правда сейчас проверить не могу. Но зачем DISRINKT worker.sname, если есть GROUP BY worker.sname? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.06.2005, 13:38 |
|
||
|
Выдергивание кол-ва записей.
|
|||
|---|---|---|---|
|
#18+
его можно опустить, это нужно в том случае если id пользователя берется из таблицы с днями, чтоб он не повторялся ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.06.2005, 14:01 |
|
||
|
Выдергивание кол-ва записей.
|
|||
|---|---|---|---|
|
#18+
вообще стоп, нельзя опускать, иначе выдаст одни и теже результаты несколько раз )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.06.2005, 14:02 |
|
||
|
Выдергивание кол-ва записей.
|
|||
|---|---|---|---|
|
#18+
А GROUP BY от этого не спасёт? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.06.2005, 16:23 |
|
||
|
Выдергивание кол-ва записей.
|
|||
|---|---|---|---|
|
#18+
спасет, просто уже устал )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.06.2005, 16:24 |
|
||
|
Выдергивание кол-ва записей.
|
|||
|---|---|---|---|
|
#18+
workers.id = workdays.man_id and workdays.opozdanie>0 or workers.id = workdays.man_id эквивалентно workers.id = workdays.man_id ? ------------------ - А как в Интеpнете pаботать? - Сначала нужно узнать, что вам нужно rtfm ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2005, 03:57 |
|
||
|
Выдергивание кол-ва записей.
|
|||
|---|---|---|---|
|
#18+
maXmoworkers.id = workdays.man_id and workdays.opozdanie>0 or workers.id = workdays.man_id эквивалентно workers.id = workdays.man_id ? Что-то я с трудом понимаю. workers.id - внешний ключь. В таблицу workdays запись вносится со следующими полями: 1 UID рабочего 2 время явки на работу 3 на сколько минут опоздал. Соответственно, если человек не опоздал, то "на сколько минут опоздал." = 0. Мне нужно вычисляемое поле "сколько раз опоздал". Соответственно, запись должна появится и если человек за месяц ни разу не опоздал. Просто тогда она будет равна нулю. А запрос который ты привёл, если я ничего не путаю, выдернит только опоздальщиков. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2005, 20:44 |
|
||
|
Выдергивание кол-ва записей.
|
|||
|---|---|---|---|
|
#18+
maXmoworkers.id = workdays.man_id and workdays.opozdanie>0 or workers.id = workdays.man_id эквивалентно workers.id = workdays.man_id ? ------------------ - А как в Интеpнете pаботать? - Сначала нужно узнать, что вам нужно rtfm нет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2005, 20:45 |
|
||
|
Выдергивание кол-ва записей.
|
|||
|---|---|---|---|
|
#18+
>выдернит только опоздальщиков. ты попробовал или просто думаешь? у не опоздавших будет count=0, а выведет всех у для кого workers.id = workdays.man_id ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2005, 20:51 |
|
||
|
Выдергивание кол-ва записей.
|
|||
|---|---|---|---|
|
#18+
Да я это сам понял после того, как запостил Не пробовал. Ибо база на работе, а я дома. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2005, 21:58 |
|
||
|
Выдергивание кол-ва записей.
|
|||
|---|---|---|---|
|
#18+
wolkнетпочему? ведь workers.id = workdays.man_id and workdays.opozdanie>0 or workers.id = workdays.man_id не зависит от workdays.opozdanie. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2005, 13:54 |
|
||
|
Выдергивание кол-ва записей.
|
|||
|---|---|---|---|
|
#18+
maxmo, человеку нужно, чтоб работало - работает, какие еще могут быть вопросы, зачем флейм разводить. --------- С уважением! wolk.nutep.com ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2005, 14:30 |
|
||
|
Выдергивание кол-ва записей.
|
|||
|---|---|---|---|
|
#18+
да я так, просто спросил :) ------------------ - А как в Интеpнете pаботать? - Сначала нужно узнать, что вам нужно rtfm ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2005, 15:36 |
|
||
|
Выдергивание кол-ва записей.
|
|||
|---|---|---|---|
|
#18+
maXmoда я так, просто спросил :) ------------------ - А как в Интеpнете pаботать? - Сначала нужно узнать, что вам нужно rtfm select worker.sname, count(workdays.workdays_id), count(workdays.opozdanie) from workers, workdays where workers.id = workdays.man_id and workdays.opozdanie>0 or workers.id = workdays.man_id group by worker.sname; выбираем имена работников (worker.sname), подсчитываем количество рабочих дней для каждого (count(workdays.workdays_id) и workers.id = workdays.man_id - если работник ни разу не опаздывал) и кол-во опозданий (count(workdays.opozdanie) и workers.id = workdays.man_id and workdays.opozdanie>0 - если работник хоть раз опоздал), следовательно, если убрать workers.id = workdays.man_id and workdays.opozdanie>0, то получим только кол-во рабочих дней или если убрать or workers.id = workdays.man_id, то только кол-во опозданий. В завершение, чтоб записи не дублировались, группируем их по именам работников (group by worker.sname). OR указывает на то, что если для данного работника нет записей в таблице опозданий, то его все равно нужно внести в список и подсчитать для него кол-во рабочих дней по заданному критерию (or workers.id = workdays.man_id). Вопросы есть?? )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2005, 16:06 |
|
||
|
Выдергивание кол-ва записей.
|
|||
|---|---|---|---|
|
#18+
SarinСоответственно, если человек не опоздал, то "на сколько минут опоздал." = 0. Мне нужно вычисляемое поле "сколько раз опоздал".имхо, запрос не работает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2005, 16:17 |
|
||
|
Выдергивание кол-ва записей.
|
|||
|---|---|---|---|
|
#18+
maXmo SarinСоответственно, если человек не опоздал, то "на сколько минут опоздал." = 0. Мне нужно вычисляемое поле "сколько раз опоздал".имхо, запрос не работает. Уверен?? Попробуй внимательно: таблицы: CREATE TABLE `workdays` ( `id` int(10) unsigned NOT NULL auto_increment, `man_id` int(10) unsigned NOT NULL default '0', `opozdanie` int(1) unsigned default NULL, PRIMARY KEY (`id`) ) INSERT INTO `workdays` VALUES (1,3,NULL),(2,3,NULL),(3,3,NULL),(4,3,NULL),(5,3,NULL),(6,2,1),(7,2,NULL),(8,2,NULL),(9,2,NULL),(10,2,1),(11,1,NULL),(12,1,1),(13,1,NULL),(14,1,NULL),(15,1,NULL); CREATE TABLE `workers` ( `id` int(10) unsigned NOT NULL auto_increment, `sname` varchar(10) NOT NULL default '', PRIMARY KEY (`id`) ) INSERT INTO `workers` VALUES (1,'user_1'),(2,'user_2'),(3,'user_3'); запрос: select workers.sname, count(workdays.id), count(workdays.opozdanie) from workers, workdays where workers.id = workdays.man_id and workdays.opozdanie>0 or workers.id = workdays.man_id group by workers.sname; результат: +--------+--------------------+---------------------------+ | sname | count(workdays.id) | count(workdays.opozdanie) | +--------+--------------------+---------------------------+ | user_1 | 5 | 1 | | user_2 | 5 | 2 | | user_3 | 5 | 0 | +--------+--------------------+---------------------------+ ЗЫ имхо /dev/hands? ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2005, 16:49 |
|
||
|
Выдергивание кол-ва записей.
|
|||
|---|---|---|---|
|
#18+
ишь... вумный... я же выделил нолик красненьким. С нуллами конечно работает. Но там стоит количество минут опоздания. Можно сказать, `opozdanie` int unsigned not null default 0 и совсем не int(1). ------------------ - А как в Интеpнете pаботать? - Сначала нужно узнать, что вам нужно rtfm ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2005, 17:42 |
|
||
|
Выдергивание кол-ва записей.
|
|||
|---|---|---|---|
|
#18+
вот полезную вещь подсказали в соседнем топике Код: plaintext 1. 2. - А как в Интеpнете pаботать? - Сначала нужно узнать, что вам нужно rtfm ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2005, 18:53 |
|
||
|
Выдергивание кол-ва записей.
|
|||
|---|---|---|---|
|
#18+
я не знаю какая там структура, но все равно, тогда просто >0 заменить на is not null --------- С уважением! wolk.nutep.com ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2005, 18:55 |
|
||
|
Выдергивание кол-ва записей.
|
|||
|---|---|---|---|
|
#18+
ой, group by забыл. ------------------ - А как в Интеpнете pаботать? - Сначала нужно узнать, что вам нужно rtfm ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2005, 19:00 |
|
||
|
Выдергивание кол-ва записей.
|
|||
|---|---|---|---|
|
#18+
wolkselect distinct worker.sname, count(workdays.workdays_id), count(workdays.opozdanie) from workers, workdays where workers.id = workdays.man_id and workdays.opozdanie>0 or workers.id = workdays.man_id group by worker.sname; или select distinct worker.sname, count(workdays.workdays_id), count(workdays.opozdanie) from workers, workdays where workers.id = workdays.man_id and workdays.opozdanie>0 or workers.id = workdays.man_id group by worker.id; Не проканал. Завтра дамп кину. А вообще проблема уже решена програмно. Но этож через ж. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2005, 23:56 |
|
||
|
Выдергивание кол-ва записей.
|
|||
|---|---|---|---|
|
#18+
wolkПохоже дампа не дождемся )) --------- С уважением! wolk.nutep.com Извините. Совсем забыл я. Заказчик решил, что сделать надо всё по другому. В связи с этим мне на голову аврал свалился. Я заказчику объяснил "Вот видите, как удобно. Вот таблица с опозданиями. Вот таблица с явками. Смотрите, считаете. Ну и зарплату выдаёте.". Заказчик сказал "Офигеть". Таким образом, задачи, которые я не смог решить средставми СУБД будет решать заказчик средствами своих мозгов. А дамп кину. Из спортивного интереса. Надож узнать как такое делать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2005, 22:03 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=33103485&tid=1853965]: |
0ms |
get settings: |
7ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
185ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
65ms |
get tp. blocked users: |
1ms |
| others: | 230ms |
| total: | 524ms |

| 0 / 0 |
