我有一个这种格式的表
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 database -e "SELECT ips FROM crazylogin_accounts WHERE name = '$nombre'" > multi.log
cat multi.log | tr ',' '\n' > ip.log
cat multi.log | sed 's/,/ /g' | tr ' ' '\n' > ip.log
while read line
do
mysql --table -h host -uroot -ppassword database -e "SELECT name as Nombre, lastAction as UltimaAccion FROM xxxxx WHERE ips like '%$line%'" >> user.log
done < ip.log
问题在于它根本没有优化。一些用户有大约 10 个或更多的值,这会产生 10 个查询。另一个问题是格式,我只想使用 --table 格式化一个结果。第三个问题是,当我看到重复的结果时,我也无法重新搜索每个结果(再次搜索每个结果以查找具有至少一个共享 IP 的用户)
任何关于正确道路的暗示将不胜感激。非常感谢!