2011-08-31 8 views
0

"event", "status"및 "user"라는 MySQL 데이터베이스에 세 개의 테이블을 설정했습니다. (아래와 같이vb.net 응용 프로그램에 사용할 sql 쿼리 문은 무엇입니까?

이벤트 (표) (아래 Event Table

STATUS 테이블) (아래 Status Table

USER 테이블) User Table

및 나는 아래의 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 

그래서 나는 그 세 개의 테이블의 정보를 가지고이 유사합니다 내 vb.net 프로그램에서 데이터 그리드보기를 생산하는 새로운 SQL 쿼리 문을 필요로 해요 Resulting Table

그러나 내 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; 
+0

이 조인 구문을 '89 명시 적 SQL 92 및 암시 적 SQL을 결합하려고, 그 첫 번째입니다! 그것은 거의 추함에 빛난다. – Johan

+0

megaupload와 같은 진부한 다운로드 사이트로 연결하지 마십시오. SO가 게시물이 너무 길다는 것에 대해 불평하지 않는 한, 데이터를 게시하는 것이 훨씬 낫습니다. – Johan

+1

아 및 -1, 복사 가능한 텍스트를 붙여 넣거나 megaupload를 사용하여 SQL '89 및 SQL '92 구문을 혼합 할 수있는 붙여 넣기 그림 용. – Johan

답변

1

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 
+0

또한 이것을 sqlserver의 저장 프로 시저로 저장하고 응용 프로그램에서 datasouce로 사용하면 sql에서 변경 한 모든 내용이 – dansasu11

+0

으로 표시되어야합니다. 저장소 프로 시저에서 mysql workbench 루틴을 의미한다고 가정 할 때 그냥 루틴 목록 또는 실제로 내 컴퓨터에 저장하고 Visual Basic Express로 가져옵니다. 또한 데이터 소스로 어떻게 사용합니까? 목록에 나타나지 않습니다 ... – daniel11

0

이렇게 쿼리를 다시 작성하십시오.

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 테이블에 변경 사항을 볼 수 없습니다

를 검색하고있어 길을 함께 할 수있는 뭔가가?

나는 당신이 DataView를 위 쿼리의 출력을 보여주고 싶은 또한 보기에 데이터를 입력 생각합니다. 마지막 같은 간단한 쿼리 이외의 아무것도에 의해 공급되지 않는 뷰에 대해 불가능하다는
:

SELECT * FROM table1 

이유는 SQL은 어떻게 테이블이 사용하는 데이터를 배치하는 방법을 모르고있다,도 않는다는 것입니다 알고 싶다.

당신이 event 테이블 자체를 변경하는 경우 그들이 select 문에서 기준을 충족하는 경우 쿼리 을 다시 실행하면, 당신은 물론 사람들을 볼 수 있습니다.

+0

그래서 위의 수정 된 SQL 쿼리를 사용할 수없고 데이터를 업데이트 할 수 없다면 어떤 솔루션을 제안합니까? 그리고 네, 위의 쿼리의 출력을보고 싶습니다. 그리고 그 뷰에 데이터를 입력 할 때 역순으로 전체 프로세스를 수행 할 수 없었습니까? 이름의 바인딩을 풀고 이름과 성으로 나눠서 ID와 메시지를 분리합니다. – daniel11

+0

당신은 "... 단순한 쿼리가 아닌 다른 것에 의해 먹히지 않는 뷰를 위해 ..."그 밖에 내가 먹을 수있는 것은 무엇입니까? – daniel11

+0

모두 내가 할 수있는 표시하고, 내 데이터베이스에 대한 정보를 변경할 수 있습니다 vb.net 클라이언트 프로그램을 사용하여 – daniel11

관련 문제