1

真的不想问这个,因为我确信它很简单,但是:

我有一个用户数据库,其中包括邮政编码(邮政编码)和出生日期的字段。

访问者可以按年龄和到他们自己位置的距离来搜索用户。为此,我必须选择所有用户,然后计算他们的年龄,然后计算他们的距离,如下所示:

$result = queryMysql("SELECT user FROM table WHERE user !='$user' ORDER BY joindate DESC ");
$num = mysql_num_rows($result);

for ($j = 0 ; $j < $num ; ++$j)
{
$row = mysql_fetch_row($result);
if ($row[0] == $user) continue;

$query = "SELECT * FROM table WHERE user='$row[0]'";
$res=mysql_query($query);
$users=mysql_fetch_assoc($res);

//Get Date of Birth and Calculate Age
$dob = $users['age'];
$age = ...

//Get Profile's Postcode and Calculate Distance 
$profilepc = $views['postcode'];
$distance = ...

if(($distance <200) AND ($age >18 AND <30)) {

}

到目前为止,没有问题。但是,然后我想运行另一个查询(用于分页),仅选择那些符合访问者设置的年龄和距离参数的用户,我可以在上面的 IF 语句中回显,但我不知道如何包含在新查询。

那么,我如何将第一个查询的结果放入某个东西(一个数组?),然后使用第一个查询中的 user_id(它们是唯一的)来只选择我的分页所需的用户?就像是:

SELECT * FROM $table WHERE user_id=(filtered user_id's) ORDER BY joindate DESC 

我希望这是有道理的。谢谢

4

3 回答 3

5

使用IN代替=

SELECT * FROM $table
WHERE user_id IN (select user_id from other_table where some_condition) 
ORDER BY joindate DESC 
于 2012-10-31T20:27:27.257 回答
1

您可以为您的子句使用子查询IN,或者如果您已经有一个 ID 的 PHP 数组:

// assuming your array of IDs is
$user_ids = array(1, 2, 3, 4);

// use implode() to create a comma separated list for use in your IN clause
$query = "SELECT * FROM {$table}
WHERE user_id IN (" . implode(',', $user_ids) . ") 
ORDER BY joindate DESC;"
于 2012-10-31T20:32:01.387 回答
1

如果你可以用 SQL 做一些事情,那么它是最好和最快的选择。下面的查询将选择所有用户,但年龄(以年为单位)超过 30 岁的用户除外。

我无法为距离编写 SQL,因为我不知道您的数据,因此不知道如何计算它。但是我添加了一些可以添加的地方。

“limit”子句将获取数据库中从 10 到 20 的记录。

   SELECT 
       * 
    FROM 
       table
    WHERE 
       user != $user
       and (
           (year(now()) - year(table.birthday))  > 30
           or (some match to calculate distance)
        )
    limit 10, 20

如果您需要来自另一个表的更多数据,您可以像这样将它们连接在一起。

   SELECT 
       * 
    FROM 
       table
       another_table
    WHERE 
       another_table.user = table.user
       table.user != $user
       and (
           (year(now()) - year(table.birthday))  > 30
           or (some match to calculate distance)
        )
    limit 10, 20

与在数据库中选择相比,以任何语言制作多个选择和循环数据都比较慢。

于 2012-10-31T21:06:10.830 回答