有如下表示乘车线路和站点的数据,要求查询出指定站点之间的所有乘车线路:
USE tempdb
GO
-- 模拟数据
SET NOCOUNT ON
IF OBJECT_ID(N'tempdb..#tb') IS NOT NULL
DROP TABLE #tb
CREATE TABLE #tb(
id int IDENTITY
PRIMARY KEY,
lineID int,
state nvarchar(10),
orderid int
)
INSERT #tb(
lineID, state, orderid)
SELECT 1, N'广州东', 1UNION ALL
SELECT 1, N'体育中心', 2UNION ALL
SELECT 1, N'体育西', 3UNION ALL
SELECT 1, N'烈士陵园', 4UNION ALL
SELECT 1, N'公园前', 5UNION ALL
SELECT 1, N'西门口', 6UNION ALL
SELECT 2, N'火车站', 1UNION ALL
SELECT 2, N'纪念堂', 2UNION ALL
SELECT 2, N'公园前', 3UNION ALL
SELECT 2, N'中大', 4UNION ALL
SELECT 2, N'客村', 5UNION ALL
SELECT 2, N'琶洲', 6UNION ALL
SELECT 2, N'万胜围', 7UNION ALL
SELECT 3, N'广州东', 1UNION ALL
SELECT 3, N'体育西', 2UNION ALL
SELECT 3, N'珠江新城', 3UNION ALL
SELECT 3, N'客村', 4UNION ALL
SELECT 3, N'市桥', 5UNION ALL
SELECT 4, N'万胜围', 1UNION ALL
SELECT 4, N'金洲', 2
CREATE INDEX IX_lineID
ON #tb(
lineID)
CREATE INDEX IX_state
ON #tb(
state)
CREATE INDEX IX_orderid
ON #tb(
orderid)
GO
之前也有发表过一些如何处理这个问题的方法,但效率不是太好。下面的这种方法加上了乘车方向的考虑:同一条线路上,只有两个乘车方向,而且一旦方向了,就不会再反向乘车(因为是从这个方向来,再坐回去是不合理的);如果某个站点可以换到另一条线路,则换乘后的另一条线路也是两个方向乘车。通过乘车方向的控制,减少了算法要搜索的路径。
-- 乘车路线查询
DECLARE
@state_start nvarchar(10),
@state_stop nvarchar(10)
SELECT
@state_start = N'广州东',
@state_stop = N'中大'
-- 查询
IF OBJECT_ID(N'tempdb..#re') IS NOT NULL
DROP TABLE #re
CREATE TABLE #re(
ID int IDENTITY
PRIMARY KEY,
path nvarchar(max),
state_count int,
line_count int,
start_lineID int,
start_state nvarchar(10),
current_lineID int,
current_state nvarchar(10),
next_orderid int,
flag int,
lineIDs varchar(max),
level int
)
CREATE INDEX IX_current_lineID
ON #re(
current_lineID)
CREATE INDEX IX_current_state
ON #re(
current_state )
CREATE INDEX IX_next_orderid
ON #re(
next_orderid )
CREATE INDEX IX_current_level
ON #re(
level )
DECLARE
@level int,
@rows int
SET
@level = 0
-- 开始
INSERT #re(
path,
state_count, line_count,
start_lineID, start_state,
current_lineID, current_state,
next_orderid, flag, lineIDs, level)
SELECT
path = CONVERT(nvarchar(max),
RTRIM(A.lineID) + N'{'
+ RTRIM(A.orderid) + N'.' + A.state
),
state_count = 0,
line_count = 0,
start_lineID = A.lineID,
start_state = A.state,
current_lineID = A.lineID,
current_state = A.state,
next_orderid = A.orderid,
flag = CASE
WHEN A.state = @state_stop THEN 0
ELSE NULL END,
lineIDs = ',' + RTRIM(A.lineID) + ',',
level = -(@level + 1)
FROM #tb A
WHERE state = @state_start
SET @rows = @@ROWCOUNT
WHILE @rows > 0
BEGIN
SELECT
@level = @level + 1
INSERT #re(
path,
state_count, line_count,
start_lineID, start_state,
current_lineID, current_state,
next_orderid, flag, lineIDs, level)
-- 同一LineID
SELECT
path = CONVERT(nvarchar(max),
A.path
+ N'->'
+ RTRIM(B.orderid) + N'.' + B.state
),
state_count = A.state_count + 1,
A.line_count,
A.start_lineID, A.start_state,
current_lineID = B.lineID,
current_state = B.state,
next_orderid = B.orderid + A.flag,
flag = CASE
WHEN B.state = @state_stop THEN 0
ELSE A.flag END,
A.lineIDs,
level = @level
FROM #re A, #tb B
WHERE A<span style=
分享到:
相关推荐
首先,公交车路线信息的存储方式显然,如果在数据库中简单的使用表 bus_route(路线名,路线经过的站点,费用)来保存公交车路线的线路信息,则很难使用查询语句实现乘车线路查询。因此,应该对线路的信息进行处理后...
公交车路线查询系统算法后台数据库设计 公交车路线查询系统的后台数据库设计是一项复杂的任务,它需要考虑到多个因素,包括数据存储、查询算法、换乘路线算法等。在本文中,我们将逐步深入地介绍公交车路线查询系统...
首先,我们来了解一下“公交线路查询”这一功能。在应用中,用户可以输入公交车的编号,系统会显示出该车的所有停靠站点及其顺序,让乘客对线路有全面了解。这对于新到西安或者不熟悉公交线路的人来说非常实用,避免...
《C++实现的公交车线路查询管理系统》 在计算机科学领域,C++是一种广泛使用的编程语言,以其高效、灵活和强大的功能而备受青睐。本项目“C++公交车线路查询管理系统”正是利用C++语言来实现的一个实用系统,它主要...
在公交车线路查询系统中,WebGIS起着核心作用,它可以集成地图服务,显示公交线路、站点位置,以及提供路线规划服务。用户只需输入起点和终点,系统就能通过WebGIS计算出最佳公交路径。 其次,公交查询和最优化路径...
标题中的“C++有界面南昌市公交车路线查询系统”表明这是一个使用C++编程语言开发的,具有图形用户界面(GUI)的应用程序,专门用于查询南昌市的公交线路。描述中的“有查找,有最短路程,有查询站点”提示我们这个...
【标题】:“公交车路线查询--busline”是一个与公共交通服务相关的应用或系统,它专注于...通过这些技术手段,"公交车路线查询--busline"能够为用户提供准确、便捷的公交线路查询服务,极大地优化了人们的出行体验。
在需求分析、总体设计和基于网络路径最优的公交查询算法探讨基础上,对查询系统进行了详细设计,并成功将三种网络路径算法应用于系统的换乘查询中,系统还实现了线网维护、线路查询、站点查询和标志性地点查询的功能...
【公交车线路查询APP系统】是一种移动应用,专为用户提供便捷的城市公交线路查询服务。这个系统设计的目的是为了帮助用户在日常出行中快速找到合适的公交路线,避免交通困扰,提高出行效率。它通常包括路线搜索、...
标题中的“VB 2005 实例之公交车路线查询+ACCESS”表明这是一个关于使用Visual Basic 2005(VB 2005)开发公交路线查询系统的实例项目,结合了ACCESS数据库来存储和处理数据。这个系统可能用于帮助乘客查询公交线路...
公交车路线查询系统是城市公共交通信息化的重要组成部分,它为市民提供了便捷的公交出行信息。后台数据库设计是此类系统的核心,确保了数据的有效存储、快速检索和高效管理。在SQL Server这样的关系型数据库管理系统...
Struts2公交车线路查询系统的设计与实现 本系统的设计与实现是基于Java编程语言,Struts2框架技术和MyEclipse集成开发工具,旨在解决当前我国公交车信息查询处在落后的状态,提供了基于B/S框架的公交线路查询系统。...
【JSP公交车线路查询系统】是一个基于Java Server Pages(JSP)技术开发的应用,用于提供城市公共交通线路的查询服务。该系统旨在方便公众快速、准确地获取公交线路信息,包括起点、终点、途经站点以及运行时间等。...
公交车线路查询APP系统 【公交车线路查询APP系统】是一种移动应用,专为用户提供便捷的城市公交线路查询服务。这个系统设计的目的是为了帮助用户在日常出行中快速找到合适的公交路线,避免交通困扰,提高出行效率。...
公交车路线查询系统后台数据库设计是构建高效公交查询服务的关键部分,它涉及到数据的合理存储、查询算法的优化以及用户友好的交互。以下是对系统后台数据库设计的详细解析: 首先,对于公交车路线信息的存储,传统...
公交车线路查询APP系统【公交车线路查询APP系统】是一种移动应用,专为用户提供便捷的城市公交线路查询服务。这个系统设计的目的是为了帮助用户在日常出行中快速找到合适的公交路线,避免交通困扰,提高出行效率。它...
【公交车线路查询APP系统】是一种移动应用,专为用户提供便捷的城市公交线路查询服务。这个系统设计的目的是为了帮助用户在日常出行中快速找到合适的公交路线,避免交通困扰,提高出行效率。它通常包括路线搜索、...
公交查询系统是一种专门为公众提供公交车路线查询、站点查询以及换乘方案查询的服务系统。它可以帮助乘客更方便快捷地找到合适的出行方式,减少出行时间,提高出行效率。在设计这类系统时,实体关系图(ER图)是非常...