从表中获取值,间隔为20,10,5

时间:2016-06-15 01:49:31

标签: php sql postgresql

嗨,我不知道以前是否曾询问过这个问题,但我希望从一个id和数字表中得到数值(数字的范围是1 - 190),给定的间隔时间是20,10和5.

如果我将间隔设置为10,那么我将获得数字值,如10,20,30,40 ...... 190,如果我将其设置为20,那么我将获得20,40,60等值。

我尝试使用 for循环,但性能和速度方面效率不高。

我使用PHP在Postgres中查询数据。

这是我的示例代码:

$interval = intval($_REQUEST['interval']);

    $sql_last = 'SELECT MAX(elevation) AS elev FROM "Contour"';
    $result_last = pg_prepare($conn, 'query_last', $sql_last);
    $result_last = pg_execute($conn, 'query_last', array());

    $row_last = pg_fetch_array($result_last, NULL, PGSQL_ASSOC);
    $max_elev = $row_last['elev'];

    for($x = $interval; $x < $max_elev; $x + $interval) {
        $sql = 'SELECT id, elevation FROM "Contour" WHERE elevation = $1';
        $result = pg_prepare($conn, $x, $sql);
        $result = pg_execute($conn, $x, array($x));

    }

2 个答案:

答案 0 :(得分:1)

如果要生成包含这些值的系列,可以执行以下操作:

select generate_series(0, 190, 10) as val

如果您想将其包含在像您这样的查询中:

select c.*
from contour c join
     (select generate_series(min(c2.elev), max(c2.elev), 10) as elev
      from contour c2
     ) cc
     on c.elevation = c2.elev;

您可能希望将min(c2.elev)替换为0

答案 1 :(得分:1)

使用for循环,您可以进行大量的数据库调用。我会打两个电话。第一个查询将获得表中的最大ID。创建一个int数组或列表,其中id为所选增量,最大为id。将列表输出为逗号分隔的字符串。然后第二个查询用&#34;其中ID在(id string)&#34;中。

第二个查询会更大但是你的大部分时间都在重复查询过程中没有那么多的数据返回。