[英]what sql query statement should i use for a vb.net application?
我在名為“事件”,“狀態”和“用戶”的MySQL數據庫中設置了三個表。 (如下所示:
活動表 (下)
狀態表 (下)
用戶表 (如下)
當我從事件表中獲取數據時,我使用下面的SQL查詢語句將這些人的名字和姓氏作為一個名為“ name”的變量綁定在一起,然后將該名字綁定到相應的user_id上; 等等。 但是,當我對事件表進行更改時,它不會顯示我所做的更改。 我敢肯定,這與我檢索數據的方式有關。
SELECT CONCAT(u.lastname, ', ', u.firstname) AS Name
, s.message AS Message
, DATE_FORMAT(e.timestamp,'%b %d %Y - %r') AS DateTime
, e.status AS Status
FROM event e
LEFT JOIN status s ON e.message_id = s.message_id
, user u
WHERE(e.user_id = u.user_id)
AND event_id IN(
SELECT MAX(e.event_id) FROM event e
GROUP BY e.user_id)
ORDER BY name
因此,我需要一個新的SQL查詢語句,該語句將獲取這三個表中的信息,並在vb.net程序中生成一個數據網格視圖,該視圖類似於以下內容:
但也將接受我通過vb.net程序中的數據網格視圖對數據庫所做的任何更改; 或者,如果我的問題與查詢語句無關,那么我想知道如何解決此問題。
如果要查看數據庫的基本布局(減去個人信息),則這里是數據庫的腳本。
CREATE DATABASE /*!32312 IF NOT EXISTS*/ `in_out`;
USE `in_out`;
CREATE TABLE `admin_levels` (
`level_id` tinyint(3) unsigned NOT NULL auto_increment,
`title` char(20) NOT NULL default '',
PRIMARY KEY (`level_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
CREATE TABLE `event` (
`event_id` mediumint(8) unsigned NOT NULL auto_increment,
`user_id` smallint(5) unsigned NOT NULL default '0',
`message_id` mediumint(8) unsigned default '0',
`timestamp` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
`status` enum('In','Out') NOT NULL default 'In',
`creator` smallint(5) unsigned default NULL,
PRIMARY KEY (`event_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
INSERT INTO `event` (`event_id`,`user_id`,`message_id`,`timestamp`,`status`,`creator`) VALUES
(1,1,1,'2005-01-17 11:50:00','Out',1),
(2,2,1,'2005-01-17 11:57:00','Out',2),
(3,3,1,'2005-01-17 11:59:00','Out',3),
(4,1,3,'2005-01-17 13:30:00','In',1),
(5,2,3,'2005-01-17 13:30:00','In',2),
(6,3,3,'2005-01-17 13:30:00','In',3),
(7,2,2,'2005-01-17 16:00:00','Out',2),
(8,3,2,'2005-01-17 16:10:00','Out',3),
(9,1,NULL,'2005-01-17 15:19:49','In',1);
CREATE TABLE `groups` (
`group_name` char(20) NOT NULL default '',
`created` datetime NOT NULL default '0000-00-00 00:00:00',
`scope` enum('Public','Private') default NULL,
`deleted` enum('True','False') default NULL,
PRIMARY KEY (`group_name`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
CREATE TABLE `status` (
`message_id` mediumint(8) unsigned NOT NULL auto_increment,
`user_id` smallint(5) unsigned default NULL,
`message` char(255) NOT NULL default '',
`deleted` enum('True','False') default NULL,
PRIMARY KEY (`message_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
INSERT INTO `status` (`message_id`,`user_id`,`message`,`deleted`) VALUES
(1,NULL,'Gone to Lunch','False'),
(2,NULL,'Gone For The Day','False'),
(3,NULL,'In Meeting','False');
CREATE TABLE `user` (
`user_id` int(10) unsigned NOT NULL auto_increment,
`lastname` char(40) NOT NULL default '',
`firstname` char(40) NOT NULL default '',
`phone` char(10) NOT NULL default '',
`username` char(16) NOT NULL default '',
`password` char(40) character set latin1 collate latin1_bin NOT NULL default '',
`administrator` enum('TRUE','FALSE') NOT NULL default 'TRUE',
`deleted` enum('TRUE','FALSE') NOT NULL default 'TRUE',
`created` datetime NOT NULL default '0000-00-00 00:00:00',
PRIMARY KEY (`user_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
INSERT INTO `user` (`user_id`,`lastname`,`firstname`,`phone`,`username`,`password`,`administrator`,`deleted`,`created`) VALUES
(1,'Hillyer','Mike','4033806535','mike','12345','TRUE','FALSE','2004-11-27 11:41:00'),
(2,'Jones','Tom','4035551212','bob','54321','FALSE','FALSE','2005-01-17 13:52:00'),
(3,'Johnson','Julie','4035551213','julie','weakpass','FALSE','FALSE','2005-01-17 13:55:00');
CREATE TABLE `user_group` (
`group_name` char(20) NOT NULL default '',
`user_id` smallint(5) unsigned NOT NULL default '0',
`level_id` tinyint(3) unsigned default NULL,
PRIMARY KEY (`user_id`,`group_name`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
嘗試這個
SELECT CONCAT(u.lastname + ', ' + u.firstname) AS Name
, s.message AS Message
, DATE_FORMAT(e.timestamp,'%b %d %Y - %r') AS DateTime
, e.status AS Status
FROM event e
LEFT JOIN status s ON e.message_id = s.message_id inner join user u on e.user_id = u.user_id
WHERE event_id IN(
SELECT MAX(e.event_id) FROM event e
GROUP BY e.user_id)
ORDER BY name
請這樣重寫查詢。
SELECT CONCAT(u.lastname, ', ', u.firstname) AS Name
, s.message AS Message
, DATE_FORMAT(e.`timestamp`,'%b %d %Y - %r') AS DateTime
, e.status AS Status
FROM event e
LEFT JOIN status s ON e.message_id = s.message_id
INNER JOIN user u ON (e.user_id = u.user_id)
WHERE e.event_id IN(
SELECT MAX(e.event_id) FROM event e
GROUP BY e.user_id)
ORDER BY name
但是,當我對事件表進行更改時,它不會顯示我所做的更改。 我確定這與我檢索數據的方式有關
為什么我看不到對event
表所做的任何更改?
我認為您想在數據視圖中顯示上述查詢的輸出,並在該視圖中輸入數據 。
對於除了簡單查詢之類的其他視圖之外的視圖,最后的事情是不可能的:
SELECT * FROM table1
原因是SQL不知道如何放置所使用表的數據,也不知道。
如果您對event
表本身進行了更改,那么當您重新運行查詢時,如果它們符合select
語句中的條件,您當然會看到這些內容。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.