我有一个表,其中包含有关我的系统的所有用户的信息。该表中的一行名为 is_active
,其中包含一个简单的字符串,表示 ACTIVE 或 INACTIVE。
我正在构建一个面板,管理员可以在其中列出所有用户的所有信息。该信息由数据表库显示。我希望数据表首先显示所有活跃用户,然后显示不活跃用户。
不幸的是,我的查询没有正确返回信息。
代码
public function get_all_users(){
$query = $this->db->prepare("SELECT * FROM users ORDER BY is_active DESC");
try{
$query->execute();
}catch(PDOException $e){
die($e->getMessage());
}
return $query->fetchAll();
}
到目前为止,输出未在分组内进行过滤,并且可以有一行:Active、active、inactive、inactive、active.inactive 等...
我认为这应该与数据表插件无关,而是与我的查询有关。有人可以帮忙吗?提前致谢!
表结构
CREATE TABLE IF NOT EXISTS `users` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`firstname` varchar(30) NOT NULL,
`lastname` varchar(30) NOT NULL,
`direct_phone` varchar(21) NOT NULL,
`ext_num` smallint(4) NOT NULL,
`cellphone` varchar(10) NOT NULL,
`num_loads_booked` int(11) unsigned NOT NULL,
`email` varchar(255) NOT NULL,
`security_level` varchar(20) NOT NULL,
`username` varchar(10) NOT NULL,
`password` varchar(64) NOT NULL,
`is_active` varchar(10) NOT NULL,
`last_logged_in` datetime NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `id` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=24 ;
最佳答案
我的猜测是你有 case sensitive排序规则已打开,不同的情况(active
、ACTIVE
、...)用作 is_active
值。尝试运行:
SELECT 'a' > 'A', 'a' < 'A', 'a' = 'A';
如果您得到 (1,0,0)
您正在运行区分大小写的排序规则,如果 (0,0,1)
不区分大小写,或检查:
SHOW VARIABLES LIKE 'collation%';
对我来说,它是 utf8_general_ci
-> _ci
意味着不区分大小写
。
让我们把这个放在一边,在文本字段中存储二进制值(is_active = yes 或 no)...您最多使用 10B 来存储 1 位。
如果您坚持使用文本(人眼友好)列,请使用 ENUM('active', 'inactive')
(枚举在内部由数字表示,因此查找速度更快)。
或者更好地使用 BOOL
(这是 TINYINT(1)
的别名)。比你必须使用:
print(row->GetInt("is_active") ? 'ACTIVE' : 'INACTIVE')
// Instead of
print(row->GetString("is_active"))
虽然有点长,但是当计算表达式等时速度更快:
if( user->is_active)
// Instead of
if( user->is_active == "active")
迁移对您来说应该也很容易:
ALTER TABLE users CHANGE is_active _is_active VARCHAR(10) NOT NULL;
ALTER TABLE users ADD is_active BOOL DEFAULT 0 BEFORE _is_active;
UPDATE users SET is_active = (
CONVERT(_is_active USING latin1) COLLATE latin1_swedish_ci = 'active'
);
-- Check results here
ALTER TABLE users DROP COLUMNS _is_active;
关于mysql - SQL 按问题排序在数据表中无法正确显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24680901/