收录日期:2019/12/11 20:24:19 时间:2016/07/14 18:11:21 标签:疑难问题
<%
station1=request.form("text3")
station2=request.form("text4")
sql="select * from [bus] where [station] like '%"&station1&"%' or '%"&station2&"%'"
set rs=server.createobject("adodb.recordset")
rs.open sql,conn,1,1
%>
该系统是用asp做的 ,上述代码是查询起始站点 到终点站之间的乘车线路。最终的查询结果显示出了4条。但是只有一条是包含起始站点和终点站的,其它的3条都是仅包含一个站点(要么只有起始站点,要么只有终点站)的线路,因为这3条路线只经过其中一个站点。我想问的是 怎么样修改sql 语句 ,使最终的结果只显示那一条包含起始站点和终点站的线路,而不显示其余的三条只包含一个站点的无关的线路?谢谢大家了,最好写上修改后的sql语句。谢
sql="select * from [bus] where [station] like '%"&station1&"%' and '%"&station2&"%'" 
给出表结构和测试数据。
引用 1 楼 happyflystone 的回复:
sql="select * from [bus] where [station] like '%"&station1&"%' and '%"&station2&"%'" 

...
CREATE TABLE T_Line(
ID      nvarchar(10),  --公交线路号
Station nvarchar(10),  --站点名称
Orders  int)           --行车方向(通过它反应每个站的上一个、下一个站)
INSERT T_Line 
SELECT N'8路'  ,N'站A',1 UNION ALL
SELECT N'8路'  ,N'站B',2 UNION ALL
SELECT N'8路'  ,N'站C',3 UNION ALL
SELECT N'8路'  ,N'站D',4 UNION ALL
SELECT N'8路'  ,N'站J',5 UNION ALL
SELECT N'8路'  ,N'站L',6 UNION ALL
SELECT N'8路'  ,N'站M',7 UNION ALL
SELECT N'20路' ,N'站G',1 UNION ALL
SELECT N'20路' ,N'站H',2 UNION ALL
SELECT N'20路' ,N'站I',3 UNION ALL
SELECT N'20路' ,N'站J',4 UNION ALL
SELECT N'20路' ,N'站L',5 UNION ALL
SELECT N'20路' ,N'站M',6 UNION ALL
SELECT N'255路',N'站N',1 UNION ALL
SELECT N'255路',N'站O',2 UNION ALL
SELECT N'255路',N'站P',3 UNION ALL
SELECT N'255路',N'站Q',4 UNION ALL
SELECT N'255路',N'站J',5 UNION ALL
SELECT N'255路',N'站D',6 UNION ALL
SELECT N'255路',N'站E',7 UNION ALL
SELECT N'255路',N'站F',8
GO

--乘车线路查询存储过程
CREATE PROC p_qry
@Station_Start nvarchar(10),
@Station_Stop  nvarchar(10)
AS
SET NOCOUNT ON
DECLARE @l int
SET @l=0
SELECT ID,Station,
Line=CAST('('+RTRIM(ID)+': '+RTRIM(Station) as nvarchar(4000)),
Orders=Orders,
[Level]=@l
INTO # FROM T_Line
WHERE Station=@Station_Start
WHILE @@ROWCOUNT>0 
AND NOT EXISTS(SELECT * FROM # WHERE Station=@Station_Stop)
BEGIN
SET @l=@l+1
INSERT #(Line,ID,Station,Orders,[Level])
SELECT 
Line=a.Line+CASE
WHEN a.ID=b.ID THEN N'->'+RTRIM(b.Station)
ELSE N') ∝ ('+RTRIM(b.ID)
+N': '+RTRIM(b.Station) END,
b.ID,b.Station,b.Orders,@l
FROM # a,T_Line b
WHERE a.[Level]=@l-1
AND(a.Station=b.Station AND a.ID<>b.ID
OR a.ID=b.ID AND(
a.Orders=b.Orders+1
OR
a.Orders=b.Orders-1))
AND LEN(a.Line)<4000
AND PATINDEX('%[ >]'+b.Station+'[-)]%',a.Line)=0
END
SELECT N'起点站'=@Station_Start
,N'终点站'=@Station_Stop
,N'乘车线路'=Line+N')' 
FROM # 
WHERE [Level]=@l 
AND Station=@Station_Stop
IF @@ROWCOUNT =0 --如果未有可以到达的线路,则显示处理结果表备查
SELECT * FROM #
GO

--调用
EXEC p_qry N'站A',N'站L'
/*--结果
起点站  终点站  乘车线路
---------- ------------ -----------------------------------------------------------
站A    站L    (8路: 站A->站B->站C->站D->站J->站L)
--*/
给个例子
引用 1 楼 happyflystone 的回复:
sql="select * from [bus] where [station] like '%"&station1&"%' and '%"&station2&"%'" 


up 
up
引用 1 楼 happyflystone 的回复:
sql="select * from [bus] where [station] like '%"&station1&"%' and '%"&station2&"%'" 
把or改成and还是不行 后台数据库是access 如何改sql语句呢?
sql语句应该一样的啊
where 后面,不是OR,而是用AND
逻辑问题
你的数据库中一定得对线路的起点和终点进行标记,否则是查不出来的,你想,用一个站点,怎么能标度两个站点呢?
如果数据库是这样:
busid,busname,station1,station2
则:
sql="select * from [bus] where ([station1] like '%"&station1&"%' and [station2] like '%"&station2&"%') and ([station2] like '%"&station1&"%' and [station1] like '%"&station2&"%')" 
也跟着犯错了! 
sql="select * from [bus] where ([station1] like '%"&station1&"%' and [station2] like '%"&station2&"%') or ([station2] like '%"&station1&"%' and [station1] like '%"&station2&"%')" 
declare @tb table(id int,[station] nvarchar(1000))

insert @tb 
select 1,'车辆厂文化宫→高谊街→道里十二道街→哈尔滨商厦→金太阳精品城→南马路→承德广场→靖宇头道街→靖宇七道街→靖宇十二道街→靖宇十六道街→靖宇二十道街→毛织厂→造纸厂→油石厂→木材厂→港务局' union all
select 2,'黎华小区→太古二十道街→太古十六道街→玛克威→靖宇十二道街→靖宇七道街→靖宇头道街→承德广场→南平街→南马路→买卖街→兆麟街(哈尔滨联升广场)→建筑艺术广场→哈站→博物馆→工人文化宫→文昌街→省政府→亚麻厂→和平桥→省中医药大学→三大动力路→哈平路→花卉市场→植物园→远大都市绿洲(林科院)→肿瘤医院 'union all
select 3,'经纬十一道街→经纬街→上游街→中央大街→兆麟公园→兆麟街(哈尔滨联升广场)→买卖街→南马路→南平街→烟厂→哈工程大学→南通大街→太平桥→先锋路→省药材公司→南直商场→桦树街→网通东直路营业厅→道外公安分局→太平桥→南通大街→哈工程大学→烟厂→南平街→南马路→买卖街→兆麟街(哈尔滨联升广场)→兆麟公园→中央大街→红霞街(临时站)→经纬街→经纬十一道街'union all
select 4,'顾乡-康安路-省化工研究院-中心医院-安和街-安升街-北安街-哈一百-兆麟街(哈尔滨联升广场)-买卖街-南马路-南平街-南极街-新发小区-宽城街-宣化街(先锋路路口)-先锋小区-嵩山小区-辽河小区-淮河路-红旗小区'

--方法一
select * from @tb where charindex('南马路',[station])>0 
INTERSECT
select * from @tb where charindex('油石厂',[station])>0 

--方法二
select * from @tb where [station] like '%南马路%' AND [station] LIKE '%油石厂%'

--方法三
select * from @tb where charindex('南马路',[station])>0 AND charindex('油石厂',[station])>0 

/*
id          station
----------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1           车辆厂文化宫→高谊街→道里十二道街→哈尔滨商厦→金太阳精品城→南马路→承德广场→靖宇头道街→靖宇七道街→靖宇十二道街→靖宇十六道街→靖宇二十道街→毛织厂→造纸厂→油石厂→木材厂→港务局
*/

请问在IIS中如何调试ASP、调试用VB或VC做的组件? 大家好!怎么即时备份MySQL数据? 关于注册一个ActiveX构件 天阿 我要疯了 我连n queens都有错 大家进来 debug (急)请问我可以用我原来论坛的数据库里的用户名和密码登陆我现在的页面吗? 请问我新做的页面使用原来论坛的数据库的用户名和密码可以吗??? 基本语法知道了 下一步该怎么做?? 璩美凤!!!!!!!!!!!!!!!!!!!! 请问mysql for win2k哪里能下到?~ 急问我新做的页面可以用原来论坛的数据库的用户名和密码登陆吗?? 谁能推荐一种绘制坐标的控件(可实现在坐标中作各种曲线)? [关注]KeyHook问题,成功拦截,但出现问题! 我新做的页面可以使用原来论坛的数据库的用户名和密码吗??(急急急) VC 中ODBC编程的问题...BUG???? .net安装求助 为什么AppWizard生成的基于CRichEditView的工程不能运行 哪里有免费asp主页空间啊 Keyword xsl:template may not be used here.???? 怎么回事啊? 谁有软件开发合同书模板? 我要通过WIN2K共享让其他电脑上网,可是我要怎么让WIN98客户端可以登陆WIN2K的域? 如何降低高速CD-ROM的噪声 怎样将jpanel上画的图保存为gif格式啊 在线等待!! 马上就给分 高手请进!关于结构化程序设计,觉得它还有用吗? 高手请进!!!!!!!!!!!111 想不明白,所以求教 问一句sql(sqlserver) cjol网站上的招聘信息为何都没有联系方法? 大家来看看~~~~` TWebBrowser的初始化? 有些国内公司想做我软件的OEM,但是...