0

この形式のテーブルがあります

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 を持つユーザーの各結果を再度検索します)。

正しい道に向けてのヒントをいただければ幸いです。どうもありがとうございました!

4

1 に答える 1