我正在尝试显示本地居住的用户列表给登录的用户。因此,如果登录的会话用户的邮政编码为“m3 4”,则其他5位用户的邮政编码以“m3”开头4'然后这些用户将被显示给用户。
我的桌子布局如下:
id | user_id | user_postcode
1 2 M3 4
2 3 SM2 7
3 4 M3 4
因此,在这种情况下,用户2将显示给登录的用户4,因为他们的邮政编码匹配。
我正在尝试在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;
}
答案 0 :(得分: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']
如果您在$_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']
答案 1 :(得分:0)
通过这个答案,我假设$ _SESSION ['user_postcode']是从某种类型的输入框中填充的,值是一个有效的zipCode(如“M3 4”)。
您可以使用preg_match从数字中拆分zipcode,并尝试从数据库中选择zipcodes。看一下这个例子:
$matches = array();
$zipCode = preg_match('/^([a-z0-9]+)/i', $_SESSION['user_postcode'], $matches);
邮政编码现在位于第二位的$ matches变量中($ matches [1])。 现在使用此值创建查询并检查它是否与其他查询相同..
$query = "SELECT *
From ptb_stats, ptb_users
WHERE ptb_stats.user_id=ptb_users.id
AND ptb_stats.user_postcode REGEX '^" . $matches[1] . "'";
答案 2 :(得分: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;
}