2016-04-13 4 views
0

私は2つのテーブルを持っているのは、ログの詳細と別のユーザー名リストです。 私は "INNER JOIN user_tbl ON log_user_id=user_id"を得ることができますが、スーパーユーザIDは例外で、この例外ユーザはユーザテーブルにありません。私はこのユーザーをバックグラウンドで使用しています。データベースとの関係は9999のようにこのユーザーのレベルです。別のテーブルを取得する場合のMySQLのケース

「スーパーバイザー」のような名前でスーパーユーザーを表示するにはどうすればよいですか?

例のSQL:

表の構造は以下のとおりです。

CREATE TABLE `user_list_tb` (
    `user_id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
    `user_name` varchar(40) COLLATE utf8_turkish_ci NOT NULL, 
    `user_pwd` varchar(40) COLLATE utf8_turkish_ci NOT NULL, 
    `user_level` int(11) NOT NULL DEFAULT '0', 
    `user_owner_id` int(10) unsigned NOT NULL, 
    `user_datetime` datetime NOT NULL, 
    `user_change_pwd` tinyint(1) DEFAULT NULL, 
    `user_pwd_try` int(3) unsigned DEFAULT NULL, 
    PRIMARY KEY (`user_id`), 
    UNIQUE KEY `user_name_UNIQUE` (`user_name`) 
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8 COLLATE=utf8_turkish_ci; 



CREATE TABLE `log_system_tb` (
    `log_id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
    `log_act_name` varchar(10) COLLATE utf8_turkish_ci NOT NULL, 
    `log_user_id` int(10) unsigned NOT NULL, 
    `log_datetime` datetime NOT NULL, 
    `log_message` varchar(256) COLLATE utf8_turkish_ci DEFAULT NULL, 
    PRIMARY KEY (`log_id`) 
) ENGINE=InnoDB AUTO_INCREMENT=49720 DEFAULT CHARSET=utf8 COLLATE=utf8_turkish_ci; 




SELECT 

log_id, 
log_act_name, 
log_user_id, 
user_name, 
log_datetime, 
log_message 

from log_system_tb 

JOIN user_list_tb 
ON (log_user_id=user_id) 

where log_datetime>="2016-04-01 00:00:00" 
and 
log_datetime<="2016-04-14 00:00:00" 

order by log_id desc limit 1000; 

敬具

メフメット

+0

「USER_NAMEとして(ケースlog_user_idとき= 9999その後、 『監督』 ELSE USER_NAME END)」より詳細な –

+0

Plaseは – Jens

答えて

1

user_listには、スーパーバイザのログに記録されたイベントに対応する行がないため、左結合を使用する必要があります。また、以下のケースステートメントをご覧ください。

SELECT 

log_id, 
log_act_name, 
log_user_id, 
(case when user_id=9999 then 'Supervisory' ELSE user_name END), 
log_datetime, 
log_message 

from log_system_tb 

LEFT JOIN user_list_tb 
ON (log_user_id=user_id) 

where log_datetime>="2016-04-01 00:00:00" 
and 
log_datetime<="2016-04-14 00:00:00" 

order by log_id desc limit 1000; 
+0

が、それは次のように私のために働いているありがとう、あなたのDDLおよびサンプルデータを追加投稿してください – mehmetulukaya

1

あなたはこのようにそれを行うことができます。

(ケース際のuser_id = 9999その後 '監督' END)

関連する問題