收录日期:2020/07/12 21:56:22 时间: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           车辆厂文化宫→高谊街→道里十二道街→哈尔滨商厦→金太阳精品城→南马路→承德广场→靖宇头道街→靖宇七道街→靖宇十二道街→靖宇十六道街→靖宇二十道街→毛织厂→造纸厂→油石厂→木材厂→港务局
*/

如何让jsp传回GB2312格式的字符串?而不是ISO88591 【批处理的问题,请大侠指点】怎么写这样的批处理,遍历一个目录下满足一定条件的所有文件,然后对这些文件做特定操作 读Excel的速度好慢 sql 指定条数查询 java作为客户端,应该怎样调用.net WCF 服务? 高手指点下这个问题呢? 一个IP地址的子网划分的题目 戴尔D630又曝丑闻 ,试问,谁在支持? 到底用数字几好呢? 多线程实现通信的问题 急,请问vbscript的vartype数据内型问题? Apache 访问日志有很多别的网站地址,并不是?? 打印报表(DW) drawtext 奇怪的 自动 换行 问题 很奇怪的网页不能访问数据库的问题!求助!~ 求解决触发器的删除操作问题,很郁闷 研究半天了,求帮忙 apache+php,apache运行html页面没有问题,但是跑php页面出现500错误,请大家帮忙下,谢谢了... 如何取的xmlnode下的值 我年底买的书什么时候给寄? C# 中[MethodImpl(MethodImplOptions.NoInlining)] ??? 一项目开发所遇到的问题!高手请进来看! 贫道多日不曾上网 今日散分祝大家新年快乐 求教:网页不能访问数据库的问题! SQL Server 不存在或拒绝访问 关于word转HTML的问题 sql 语句写统计 有语法错误吗? ANSI_NULLS选项的疑惑 动态生成属性页,控制属性页中默认按钮的活性化?? 求这句英文的翻译Flexibility prorate and chargeback property and lease expenses to tenants and departments 请教汇编高手 保护模式下是如何实现了使微机系统支持任务处理的?