0

ログインしているユーザーにローカルに住んでいるユーザーのリストを表示しようとしています。そのため、ログインしているセッション ユーザーの郵便番号が「m3 4」で、他の 5 人のユーザーの郵便番号が「m3 4」で始まる場合、これらのユーザーはユーザーに表示されます。

私のテーブルは次のようにレイアウトされています:

id  |   user_id  | user_postcode
1          2          M3 4
2          3          SM2 7
3          4          M3 4

したがって、このシナリオでは、郵便番号が一致するため、ログインしているユーザー 4 にユーザー 2 が表示されます。

私はmysqlでこれをやろうとしていますが、郵便番号を次のように手動で入力すると機能します:

AND ptb_stats.user_postcode='M3 4'

しかし、私はそれをユーザーセッション固有にしようとしているので、ログインしているユーザー / $_SESSION[user_id'] が他のユーザーと同じ郵便番号を持っている場合。

私はこのようにしようとしていますが、郵便番号のないすべてのユーザーを表示していますが、郵便番号が一致するユーザーを表示する必要があります。

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

3 に答える 3

0

ユーザー ID が に保存されている場合は$_SESSION['user_id']、ローカル ユーザーを取得できます。

select u.id, u.name
from ptb_users u
join ptb_stats s1 on s1.user_id = $_SESSION['user_id']
join ptb_stats s2 on s2.user_id = u.id and s2.user_postcode = s1.user_postcode
where u.id <> $_SESSION['user_id']

SQLフィドル

に郵便番号があれば、$_SESSION['user_postcode']さらに簡単です

select u.id, u.name
from ptb_users u
join ptb_stats s on s.user_id = u.id
     and s.user_postcode = $_SESSION['user_postcode']
where u.id <> $_SESSION['user_id']

SQLフィドル

于 2013-03-11T12:38:31.817 に答える
0

この回答では、 $_SESSION['user_postcode'] は何らかのタイプの入力ボックスから入力され、値は有効な zipCode (「M3 4」など) であると想定しています。

preg_match を使用して、数字から郵便番号を分割し、データベースから郵便番号を選択しようとすることができます。次の例を見てください。

$matches = array();
$zipCode = preg_match('/^([a-z0-9]+)/i', $_SESSION['user_postcode'], $matches); 

郵便番号は、2 番目の場所 ($matches[1]) の $matches 変数に含まれるようになりました。この値を使用してクエリを作成し、他の値と同じかどうかを確認します..

$query = "SELECT *
        From ptb_stats, ptb_users
        WHERE ptb_stats.user_id=ptb_users.id
        AND ptb_stats.user_postcode REGEX '^" . $matches[1] . "'";
于 2013-03-11T12:38:33.703 に答える
0

あなたの説明によると、私はそのようなことに行きます。

PDO のプリペアド ステートメントを使用して、クエリを処理しました。

function get_local_users() {
    // given that it was created like this: $connection = new PDO('mysql:host=localhost;dbname=testdb;charset=UTF-8', 'username', 'password');
    global $connection;

    $stmt = $connection->prepare(
        "SELECT ptb_stats.*
        FROM ptb_stats, ptb_users
        WHERE ptb_stats.user_id = ptb_users.id
        AND ptb_stats.user_id != ?
        AND ptb_stats.user_postcode = (
            SELECT user_postcode 
            FROM ptb_stats 
            WHERE user_id = ?
        )");

    $stmt->execute(array($_SESSION['user_id'], $_SESSION['user_id']));
    $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);

    return $rows;
}
于 2013-03-11T12:39:10.677 に答える