想象一下名为 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
));
答案 0 :(得分:1)
您可以使用union all
和limit
:
(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代码。