2016-04-13 30 views
0

İki tablo var bir tane log detayları ve başka bir kullanıcı adı listesi. "INNER JOIN user_tbl ON log_user_id=user_id" ile alabiliyorum ama aynı zamanda bir süper kullanıcı kimliği istisnası var ve bu istisna kullanıcısı kullanıcı tablosunda değil. Bu kullanıcı arka planında veritabanı ile ilişkinin bu kullanıcının 9999 gibi bir seviyesi olduğunu düşünüyorum.Başka bir tablo alırken Mysql durumu

Süper kullanıcıyı "Denetleyici" gibi bir ad olarak nasıl gösterebilirim?

Örnek sql:

Tablo yapıları şunlardır:

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; 

Saygılarımızla

Mehmet

+0

daha detaylı –

+0

Plase "user_name olarak (= 9999 ardından 'denetleyici' BAŞKA user_name SON log_user_id zaman durumda)" – Jens

cevap

1

Bir sol birleştirme kullanmanız gerekir çünkü kullanıcı listesinde, denetleyicinin günlüğe kaydedilen olaylarına karşılık gelen bir satır olmayacaktır. Ayrıca aşağıdaki durum beyanına bakınız.

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

o kadar benim için çalıştı edilir teşekkür ederiz ddl ve örnek veri eklemek gönderin – mehmetulukaya

1

Böyle yapabilirsiniz:

(vaka olduğunda user_id = 9999 sonra 'Denetim' END)