0

3つのテーブルで一致するかどうかをチェックするクエリ(以下)があります。3つのテーブルすべてに、列UIDとIPADDRESSがあります。3番目のテーブルにもUSERNAMEがあります。以下のクエリを変更して、変数$ usernameにIPアドレスと一致するユーザー名の一意のリストを入力するにはどうすればよいですか?

したがって、各テーブルでIPアドレスが一致するUIDは、2、3、6、6、23、2、6となる可能性があります。これは、複数のエントリがあり、誰かが他のIPをスプーフィングした可能性があるためです。私が欲しいのは、UID 2、3、6、23(一意のリスト)に一致するユーザー名を$usernameに入力するクエリです。私はMySQLとクエリにまったく慣れていないことを伝えなければなりません。クエリは次のとおりです。

error_reporting(E_ALL & ~E_NOTICE & ~8192);
$UAM = strtoupper($_SERVER['HTTP_USER_AGENT']);
$ips = strtoupper($_SERVER['REMOTE_ADDR']);

$myquery= "select sum(total)
FROM (SELECT count(*) as total,userid
      FROM " .TABLE_PREFIX."memberviews v
      where v.ipaddress = '$ips'
      union all
      SELECT count(*) as total,userid
      FROM " .TABLE_PREFIX."membervisits v1
      where v1.ipaddress = '$ips'
      union all
      SELECT count(*) as total,userid
      FROM " .TABLE_PREFIX."user v3
      where v3.ipaddress = '$ips'
      )src";

$result = mysql_query($myquery);
$rowCount = mysql_num_rows($myquery);
$row = mysql_fetch_array($myquery);
$username = $row['userid'];

    If($rowCount !=0){
      $fp = fopen("logtext.txt", "a");
$DateOfRequest = date('m-d-Y H:i:s');
fwrite($fp, "Registration Attempt\n\nDate: . $DateOfRequest . \nMatched Member: . $username . \nWith User Agent:  . $UAM . \nIP: . $ips . \n\n");
    }
mysql_free_result($myquery);

現在、クエリはファイルを書き込むのと同じくらい機能します。すべての助けに感謝します:)

4

1 に答える 1

0

私があなたの質問を正しく理解している場合、これはあなたにIPアドレスに関連付けられたユーザー名のリストを取得します:

SELECT username
  FROM uses AS u
  JOIN (SELECT userid
          FROM memberviews AS v1
         WHERE v1.ipaddress = $ips
        UNION
        SELECT userid
          FROM membervisits AS v2
         WHERE v2.ipaddress = $ips
        UNION
        SELECT userid
          FROM user AS v3
         WHERE v3.ipaddress = $ips
       ) AS v ON u.userid = v.userid

ほとんどの場合、SQLのPHPを解除しまし$ipsた—IPアドレスが必要になる場所をマークします。UNION(ALLなし)は、重複するユーザーID値を排除します。一意のユーザーIDのリストは、対応するユーザー名を生成するためにUserテーブルと結合されます。

これにより、ユーザー名ごとに1つずつ、複数の行が生成されることに注意してください。あなたの質問は、出力のユーザーIDとユーザー名の間であいまいです。番号のみが必要な場合は、メインクエリとしてUNIONサブクエリのみが必要です。リストから単一の値を作成できるGROUP_CONCATなどのMySQLメカニズムがあります。マニュアルをお読みください。

于 2012-11-08T15:39:52.757 に答える