MySQL逗号分隔字段查询
我有一张这种格式的桌子MySQL逗号分隔字段查询,mysql,list,comma,Mysql,List,Comma,我有一张这种格式的桌子 name char password char ips char lastAction timestamp 样本: SELECT * FROM XXXX LIMIT 0,1; | name | password | ips | lastAction | | Dixon | encripted password here | 190.31.x
name char
password char
ips char
lastAction timestamp
样本:
SELECT * FROM XXXX LIMIT 0,1;
| name | password | ips | lastAction |
| Dixon | encripted password here | 190.31.xx.xxx,201.252.xx.xxx,190.137.xx.xxx | 2013-08-03 14:27:38 |
我要做的是搜索一个名称,找出该名称分配的IP,并搜索包含至少一个逗号分隔的IP列表值的名称。我遇到的问题是,它是一个逗号分隔的列表
到目前为止,我在bash中所做的是(省略了不必要的部分):
mysql-h host-uroot-ppassword数据库-e“从crazylogin_帐户中选择IP,其中name='$nombre'>multi.log
cat multi.log | tr',''\n'>ip.log
cat multi.log | sed's/,//g'| tr''''\n'>ip.log
读行时
做
mysql--table-h host-uroot-ppassword database-e“选择名称作为Nombre,最后一个操作作为Ultimaccion,从xxxxx开始,IP像“%$line%””>>user.log
完成
问题是它根本没有经过优化。有些用户有大约10个或更多的值,这会生成10个查询。另一个问题是格式,我只想使用--table格式化一个结果。
第三个问题是,由于我有重复的结果,我也无法重复搜索每个结果(再次搜索每个结果,寻找至少有一个共享ip的用户)
任何关于正确道路的暗示都将受到赞赏。多谢各位 至于优化,您可以通过表格来解决 用户表
CREATE TABLE IF NOT EXISTS `users` (
`id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`name` varchar(32) NOT NULL,
`password` varchar(123) NOT NULL,
`lastaction` date NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `name` (`name`)
) ENGINE=InnoDB AUTO_INCREMENT=1 ;
CREATE TABLE IF NOT EXISTS `ips` (
`id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`ipaddress` varchar(32) NOT NULL,
PRIMARY KEY (`id`),
) ENGINE=InnoDB AUTO_INCREMENT=1 ;
登录表
CREATE TABLE IF NOT EXISTS `users` (
`id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`name` varchar(32) NOT NULL,
`password` varchar(123) NOT NULL,
`lastaction` date NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `name` (`name`)
) ENGINE=InnoDB AUTO_INCREMENT=1 ;
CREATE TABLE IF NOT EXISTS `ips` (
`id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`ipaddress` varchar(32) NOT NULL,
PRIMARY KEY (`id`),
) ENGINE=InnoDB AUTO_INCREMENT=1 ;
从这里,您可以通过左连接访问用户的帐户信息及其登录IP
SELECT
u.id as user_id,
u.name as user_name,
u.password as user_password,
u.lastaction as user_lastaction,
i.ipaddress as ipaddress
FROM users as u
LEFT JOIN ips as i ON i.id = u.id
WHERE user_name = `bob`;