0

これが正しいかどうかはわかりませんが、正しい方向に向けるための助けを借りて行うことができます.

基本的に私はと呼ばれるテーブルを持っていますptb_stats。この表のレイアウトは次のようになります。

user_id  |  user_postcode

   1             m3 4
   2             m3 4
   3             kt1 3
   4             sm2 7

一致する郵便番号を持つすべてのユーザーを表示する mysql クエリを生成しようとしています。たとえば、user 1 / user_id 1がログインしている場合、誰が自分とuser 2同じ郵便番号を持っているかがわかります (m3 4 で始まります)

これは、例として、ユーザー 1 とユーザー 2 が互いに 5 マイル以内にいることをユーザーにほぼ伝えます。

私はこれである作業クエリを持っています:

function get_local_users() {
            global $connection;
            $query = "
            SELECT *
            From ptb_stats, ptb_users
            WHERE ptb_stats.user_id=ptb_users.id
            AND ptb_stats.user_postcode='m3 4'
            AND ptb_users.id!=".$_SESSION['user_id']."";
            $local_set = mysql_query($query, $connection);
            confirm_query($local_set);
            return $local_set;  

        }

現時点では、郵便番号をクエリに手動で入力して機能させる必要があります。私の問題は、同じ郵便番号を持つユーザーをログインしているユーザーと照合するようにクエリに指示するセッション変数を割り当てる必要があることです。

現時点では $_SESSION['user_id'] を変数として設定していますが、誰かが以前にこの変数を設定しており、すべての作業を修正しようとしていますが、それを行った人と連絡を取ることができません。だから私はセッション変数を理解していません。$_SESSION['user_id'] を $_SESSION['user_postcode'] に変更するだけでうまくいくと思っていましたが、基本的に私がする必要があるのは、クエリを取得する方法です:

ログインしているユーザーuser_postcodeが (どんな値でも) で、それらが一致する他のユーザーであるuser_postcodes場合、これらを表示します。

誰かがこれを機能させるために何をする必要があるか教えてください。とても感謝しております。ありがとうございました。

4

1 に答える 1

0
SELECT  a.*
FROM
        tableName a
        INNER JOIN
        (
            SELECT  user_postcode
            FROM    tableName
            GROUP   BY user_postcode
            HAVING  COUNT(*) > 1
        ) b ON a.user_postcode = b.user_postcode

更新 1

function get_local_users() 
{ 
    global $connection; 
    $query = "  SELECT  a.* 
                FROM    ptb_stats a 
                        INNER JOIN 
                        ( 
                            SELECT user_postcode 
                            FROM ptb_stats 
                            GROUP BY user_postcode 
                            HAVING COUNT(DISTINCT user_id  ) > 1 
                        ) b ON a.user_postcode = b.user_postcode 
                WHERE a.user_id <> " . $_SESSION['user_id']; 
    $local_set = mysql_query($query, $connection); 
    confirm_query($local_set); 
    return $local_set; 
}

補足として、変数のSQL Injection値が外部から取得された場合、クエリは脆弱です。予防方法については、以下の記事をご覧ください。を使用すると、値を一重引用符で囲む必要がなくなります。PreparedStatements

于 2013-03-12T14:15:20.487 に答える