仅显示数据库

时间:2015-06-04 00:34:17

标签: php mysql

想象一下名为 geography 的数据库表,其中包含世界各国的信息,包括每个国家/地区的公里数(英里和公里)。我想写关于每个国家的文章,使用我的数据库列出某些统计数据,包括它的大小(面积) - 但是有一个转折。

例如,一篇关于越南的文章将列出越南以及下一个最大和次最小国家的地区,从最大(最高)到最小,如下:

马来西亚| 329750

越南| 329560

挪威| 324220

我可以轻松创建一个显示所有国家/地区值的表格。但有人可以告诉我如何只显示三个连续的值,特色国家位于中心?

一些注意事项:首先,我的数据库中的值没有逗号(例如18070)。此外,一些包括小数(例如0.2)。但是,如果这是一个问题,我可能会改变数据,添加逗号并将数字四舍五入。

以下答案对我有意义,但我并不清楚如何实施它;我收到了语法错误。

我使用实际值,但我使用的是另一个表 - gw_geog_states_geog - 其中包含美国州的值。我试图访问两个值 - IDArea(列出状态的ID&,例如,us-vt = Vermont)和Area(平方英里的大小)。

我怀疑问题是由这一行引起的:

$stm->execute(array(
 'MyURL'=>$MyURL
));

这是整个剧本:

$MyURL = 'us-vt';

$stm = $pdo->prepare("select t.*
from ((select IDArea, Area
   from gw_geog_states_geog
   where IDArea = 'us-vt'
  ) union all
  (select IDArea, Area
   from gw_geog_states_geog
   where Area > (select Area from gw_geog_states_geog where IDArea =   'us-vt')
   order by Area
   limit 1
  ) union all
  (select IDArea, Area
   from gw_geog_states_geog
   where Area < (select Area from gw_geog_states_geog where IDArea = 'us-vt')
   order by Area desc
   limit 1
  )
 ) t
order by size;")

如果我在开头添加括号并删除以下内容,则我的最新修订版有效:

$stm->execute(array(
'MyURL'=>$MyURL
));

1 个答案:

答案 0 :(得分:1)

您可以使用union alllimit

执行此操作
(select c.*
 from countries 
 where country = 'Vietnam'
) union all
(select c.*
 from countries
 where size > (select size from countries where country = 'Vietnam')
 order by size
 limit 1
) union all
(select c.*
 from countries
 where size < (select size from countries where country = 'Vietnam')
 order by size desc
 limit 1
)
order by size

只要没有关系,这种方法就可以了 - 我不认为有两个国家的区域完全相同。

编辑:

试试这个:

$stm = $pdo->prepare"
select t.*
from ((select IDArea, Area
       from gw_geog_states_geog
       where IDArea = 'us-vt'
      ) union all
      (select IDArea, Area
       from gw_geog_states_geog
       where Area > (select Area from gw_geog_states_geog where IDArea = 'us-vt')
       order by Area
       limit 1
      ) union all
      (select IDArea, Area
       from gw_geog_states_geog
       where Area < (select Area from gw_geog_states_geog where IDArea = 'us-vt')
       order by Area desc
       limit 1
      )
     ) t
order by size;")

然后继续使用其余的PHP代码。