2010-08-20 190 views
3

我需要您的帮助: 我希望从表中搜索有多少用户(id_uzy)在本周的例子中进行了预留,其次是他们保留的小时数(godzina [pl] - > hour [en])和这个小时发现所有id_urz。查询数据库MySQL

实施例:

  1. id_uzy-> 1->小时(9-10) - > id_urz(2,3,4)
  2. id_uzy-> 1->小时(10-11) - > id_urz(2,3,4)
  3. id_uzy-> 2-> hour(10-11) - > id_urz(4,5)
  4. id_uzy-> 1-> hour(12-13) - > id_urz(4,5)

这是我的表结构:

id_rez id_urz id_uzy data  godzina kiedy_rezerwowano 
297  4 2  2010-08-23 14-15 2010-08-20 19:07:27 
296  4 2  2010-08-23 13-14 2010-08-20 19:07:27 
295  4 2  2010-08-23 12-13 2010-08-20 19:07:27 
294  4 2  2010-08-23 11-12 2010-08-20 19:07:27 
293  26 2  2010-08-23 14-15 2010-08-20 19:07:27 
292  26 2  2010-08-23 13-14 2010-08-20 19:07:27 
291  26 2  2010-08-23 12-13 2010-08-20 19:07:27 
290  26 2  2010-08-23 11-12 2010-08-20 19:07:27 
289  4 3  2010-08-30 14-15 2010-08-20 19:07:02 
288  4 3  2010-08-30 13-14 2010-08-20 19:07:02 
287  8 3  2010-08-30 14-15 2010-08-20 19:07:02 
286  8 3  2010-08-30 13-14 2010-08-20 19:07:02 
285  1 3  2010-08-23 14-15 2010-08-20 19:06:43 
284  1 3  2010-08-23 13-14 2010-08-20 19:06:43 
283  1 3  2010-08-23 09-10 2010-08-20 19:06:43 
282  1 3  2010-08-23 08-09 2010-08-20 19:06:43 
281  6 3  2010-08-23 14-15 2010-08-20 19:06:43 
280  6 3  2010-08-23 13-14 2010-08-20 19:06:43 
279  6 3  2010-08-23 09-10 2010-08-20 19:06:43 
278  6 3  2010-08-23 08-09 2010-08-20 19:06:43 

对于这张表请帮助我找到解决办法。

编辑 另外这里的SQL语句添加到您的数据库:

CREATE TABLE IF NOT EXISTS `prz_rezerwacje` (
    `id_rez` int(5) NOT NULL AUTO_INCREMENT, 
    `id_urz` int(6) NOT NULL, 
    `id_uzy` int(3) NOT NULL, 
    `data` date NOT NULL, 
    `godzina` varchar(5) NOT NULL, 
    `kiedy_rezerwowano` datetime NOT NULL, 
    PRIMARY KEY (`id_rez`), 
    KEY `id_uzytkownika_fk` (`id_uzy`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COMMENT='Rezerwacje sprzętu.' AUTO_INCREMENT=298 ; 

-- 
-- Zrzut danych tabeli `prz_rezerwacje` 
-- 

INSERT INTO `prz_rezerwacje` (`id_rez`, `id_urz`, `id_uzy`, `data`, `godzina`, `kiedy_rezerwowano`) VALUES 
(297, 4, 2, '2010-08-23', '14-15', '2010-08-20 19:07:27'), 
(296, 4, 2, '2010-08-23', '13-14', '2010-08-20 19:07:27'), 
(295, 4, 2, '2010-08-23', '12-13', '2010-08-20 19:07:27'), 
(294, 4, 2, '2010-08-23', '11-12', '2010-08-20 19:07:27'), 
(293, 26, 2, '2010-08-23', '14-15', '2010-08-20 19:07:27'), 
(292, 26, 2, '2010-08-23', '13-14', '2010-08-20 19:07:27'), 
(291, 26, 2, '2010-08-23', '12-13', '2010-08-20 19:07:27'), 
(290, 26, 2, '2010-08-23', '11-12', '2010-08-20 19:07:27'), 
(289, 4, 3, '2010-08-30', '14-15', '2010-08-20 19:07:02'), 
(288, 4, 3, '2010-08-30', '13-14', '2010-08-20 19:07:02'), 
(287, 8, 3, '2010-08-30', '14-15', '2010-08-20 19:07:02'), 
(286, 8, 3, '2010-08-30', '13-14', '2010-08-20 19:07:02'), 
(285, 1, 3, '2010-08-23', '14-15', '2010-08-20 19:06:43'), 
(284, 1, 3, '2010-08-23', '13-14', '2010-08-20 19:06:43'), 
(283, 1, 3, '2010-08-23', '09-10', '2010-08-20 19:06:43'), 
(282, 1, 3, '2010-08-23', '08-09', '2010-08-20 19:06:43'), 
(281, 6, 3, '2010-08-23', '14-15', '2010-08-20 19:06:43'), 
(280, 6, 3, '2010-08-23', '13-14', '2010-08-20 19:06:43'), 
(279, 6, 3, '2010-08-23', '09-10', '2010-08-20 19:06:43'), 
(278, 6, 3, '2010-08-23', '08-09', '2010-08-20 19:06:43'); 
+3

+1对于您所追求的内容的体面解释为我们翻译一些专栏名称让它成为可能! – 2010-08-20 17:09:03

+0

定义一周的开始和结束日期。有人说周一是本周的开始,其他人说周日。谢谢。 – XstreamINsanity 2010-08-20 17:24:19

+0

这个例子的权利是2日期和2个星期一。所以选择只从23/08/2010-28/08/2010 – WooCaSh 2010-08-20 17:27:18

回答

1

东西沿着这条线应该工作:

SELECT pr.id_uzy, pr.godzina, (SELECT pr2.id_urz 
          FROM prz_rezerwacje pr2 
          WHERE pr2.id_uzy = pr.id_uzy 
          AND pr2.godzina = pr.godzina) as id_urz_group 
FROM prz_rezerwacje pr; 

你可以再建一个WHERE语句成过滤需要。例如,如果您希望查询运行一个动态的一周(即运行它以生成报告),您可以使用以下代码:

WHERE kiedy_rezerwowano BETWEEN DATE_SUB(NOW(), INTERVAL x DAY) AND NOW();