この形式のテーブルがあります
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 |
私がしたいのは、名前を検索し、その名前が割り当てられた ips を見つけて、その IP のコンマ区切りリストの値を少なくとも 1 つ含む名前を検索することです。私が抱えている問題は、それがコンマ区切りのリストであることです。
これまでに 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を使用してフォーマットされた結果を1つだけにしたかったのです。そして 3 番目の問題は、結果を繰り返しているため、各結果を再帰的に検索することもできないことです (少なくとも 1 つの共有 IP を持つユーザーの各結果を再度検索します)。
正しい道に向けてのヒントをいただければ幸いです。どうもありがとうございました!