Я пытаюсь запросить базу данных MySQL о доступных компьютерах в загруженной лаборатории.У меня есть две таблицы, компьютер и компьютер.Таблица COMPUSE обновляется каждый раз, когда пользователь входит в систему или выходит из компьютера.Когда время выхода из системы равно нулю, компьютер используется.В этом примере используются компьютеры 1, 2, 3 и 8.Доступны компьютеры 4, 5, 6, 7, 9, 10.
|-----------------------|-----------------------|----------|-----------|
| logontime | logofftime | recID | compname |
|-----------------------|-----------------------|----------|-----------|
| 2011-05-13 13:45:16 | <<null>> | 310052 | Comp001 |
| 2011-05-13 13:35:18 | 2011-05-13 13:39:37 | 310043 | Comp001 |
| 2011-05-13 12:12:09 | 2011-05-13 12:33:37 | 309979 | Comp001 |
| 2011-05-13 13:00:57 | <<null>> | 310018 | Comp002 |
| 2011-05-13 11:30:13 | 2011-05-13 12:58:15 | 309940 | Comp002 |
| 2011-05-13 09:36:15 | 2011-05-13 09:47:22 | 309850 | Comp002 |
| 2011-05-13 09:25:29 | <<null>> | 309840 | Comp003 |
| 2011-05-13 08:45:38 | 2011-05-13 09:24:03 | 309793 | Comp003 |
| 2011-05-12 22:39:58 | 2011-05-13 00:36:31 | 309640 | Comp003 |
| 2011-05-13 12:06:22 | 2011-05-13 12:50:23 | 309972 | Comp004 |
| 2011-05-13 11:10:16 | 2011-05-13 12:01:16 | 309915 | Comp004 |
| 2011-05-13 07:17:18 | 2011-05-13 09:42:10 | 309731 | Comp004 |
| 2011-05-13 11:51:38 | 2011-05-13 12:15:35 | 309959 | Comp005 |
| 2011-05-13 08:55:14 | 2011-05-13 09:47:48 | 309807 | Comp005 |
| 2011-05-12 18:15:05 | 2011-05-12 18:15:16 | 309502 | Comp005 |
| 2011-05-13 12:08:40 | 2011-05-13 13:16:41 | 309974 | Comp006 |
| 2011-05-13 11:29:09 | 2011-05-13 12:05:56 | 309939 | Comp006 |
| 2011-05-13 11:10:41 | 2011-05-13 11:19:14 | 309916 | Comp006 |
| 2011-05-13 10:45:27 | 2011-05-13 11:16:44 | 309896 | Comp007 |
| 2011-05-13 09:21:42 | 2011-05-13 09:55:48 | 309839 | Comp007 |
| 2011-05-13 08:23:33 | 2011-05-13 09:14:24 | 309770 | Comp007 |
| 2011-05-13 13:54:12 | <<null>> | 310058 | Comp008 |
| 2011-05-13 13:38:53 | 2011-05-13 13:39:23 | 310045 | Comp008 |
| 2011-05-13 10:13:23 | 2011-05-13 13:26:51 | 309878 | Comp008 |
| 2011-05-13 12:16:06 | 2011-05-13 13:26:21 | 309984 | Comp009 |
| 2011-05-13 10:13:09 | 2011-05-13 12:15:13 | 309877 | Comp009 |
| 2011-05-13 08:23:22 | 2011-05-13 10:07:08 | 309769 | Comp009 |
| 2011-05-13 13:45:51 | 2011-05-13 13:47:11 | 310053 | Comp010 |
| 2011-05-13 11:18:12 | 2011-05-13 13:19:59 | 309925 | Comp010 |
| 2011-05-13 07:28:50 | 2011-05-13 09:50:09 | 309737 | Comp010 |
|-----------------------|-----------------------|----------|-----------|
Эти данные должны быть объединены с таблицей, в которой указано, на каком этаже здания находится компьютер.Эта таблица выглядит примерно так:
|--------|-----------|-------------|
| compID | compname | LOCATION |
|--------|-----------|-------------|
| 95 | Comp001 | 1st Floor |
| 96 | Comp002 | 1st Floor |
| 97 | Comp003 | 1st Floor |
| 98 | Comp004 | 1st Floor |
| 99 | Comp005 | 2nd Floor |
| 100 | Comp006 | 2nd Floor |
| 101 | Comp007 | 2nd Floor |
| 102 | Comp008 | 3rd Floor |
| 103 | Comp009 | 3rd Floor |
| 104 | Comp010 | 3rd Floor |
|--------|-----------|-------------|
В первой таблице COMPUSE содержится несколько тысяч записей, так как она используется для расчета статистики использования в лаборатории.Мне нужно создать вывод о том, сколько компьютеров доступно на каждом уровне.Я не знаю, как соединить местоположение из таблицы COMPUTERS и compname из таблицы COMPUSE без нарушения моего запроса.Первоначально я выполнил следующий запрос, чтобы определить общее количество доступных компьютеров, но мне действительно нужно иметь возможность разбить его по площади здания.
SELECT
(SELECT COUNT(compname)
FROM compusage.computers) -
(SELECT COUNT(compname)
FROM compusage.compuse
WHERE logofftime IS NULL)
Может ли кто-нибудь помочь мне построить запрос, которыйбудет выводить количество доступных компьютеров на каждом уровне здания?Ожидаемый результат в этом примере:
Level 1: 1 computer (of 4) available
Level 2: 3 computers (of 3) available
Level 3: 2 computers (of 3) available
Спасибо, Джордан
ОБНОВЛЕНИЕ: Это действительно похоже на то, что я пытаюсь сделать, но я также не могу понять,как адаптировать эти запросы: PHP :: Group и вычитать две таблицы
ОБНОВЛЕНИЕ 2: Это то, что я пытаюсь сейчас адаптировать, но я недостаточно хорошо понимаю подзапросы, чтобы получитьчтобы это работало:
select (totalcomps.total - inuse.inusecomps) as available, totalcomps.total
from (SELECT count(compname) as total, location
FROM compuse.computers
GROUP BY location) as totalcomps
inner join (SELECT count(compname) as inusecomps
FROM computers.compuse
WHERE logofftime is null
GROUP BY location) as inuse
on computers.compname = compuse.compname
ОБНОВЛЕНИЕ 3: я обновил пример данных, чтобы он стал более реальным примером с большим количеством записей.