简单的sql查询,纠结...

美人心计1999 2010-07-13 11:52:13
如下,表a有个字段content
值为:
0=商店名字1|某街道xx号|021-3333333
1=商店名字2|某街道xx号|021-3222222
2=商店名字3|某街道xx号|021-5555555
3=商店名字4|某街道xx号|021-5666665
........
意思就是名字|地址|电话这种格式
想要按照商店的名字进行模糊查询....
问题是商店名字不是单独存储在一个字段里,而是和改商店地址,电话存储在一起....
要查的话需要从content里面把名字取出来,但是一个字段里面可能有一个商店,也可能有多个商店,所以就考虑是不是要用循环啊,但是循环也没用过,不知道如何用.....谁知道,说下....
该如何查呢....纠结人....
...全文
131 点赞 收藏 23
写回复
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
gwn1902 2010-07-16
表结构的设计也太牛叉了吧,第一次看到这样设计的.如果为了以后的方便最好现在就改表结构,
我想到的笨方法:select * from table where content like '%商店名字%'这样查询个大概,
然后再在程序里面去遍历数组判断...
回复
life169 2010-07-16
select * from table where content REGEXP '^|{$xxx}|$'
这个是对的
回复
life169 2010-07-16
大概应该是这样:
select * from table where content REGEXP '^[|{$xxx}|]$'
{$xxx} 这个是你的查询变量

这个正则的意思是模糊匹配 第一个“|”到第二个“|”之间的内容与查询变量进行匹配。
我也不知道这个正则写的对不对,大体是这个意思,你再去搜搜。
回复
life169 2010-07-16
sql查询语句里加正则表达式可以解决
例如:

select * from table where content REGEXP '。。。'

具体的正则我不会写,你可以上网搜索一下。
回复
nkym0626 2010-07-14
用LIKE语句
回复
amani11 2010-07-14
建议拆字段吧,数据库设计不合理
回复
gumwzg 2010-07-14

在mysql里写个方法吧

你的记录里 所有等号后面都是商店名字

在方法里查找
回复
woshiguozhongbin 2010-07-14
表设计的有点难度...
如果数据量不大
办法就是取出全部的content
然后再根据"|" 拆分成数组...
然后再来对比...
回复
helloyou0 2010-07-14
如果以后还要和这个表打交道,还不如改结构呢 ......
回复
zhang6464 2010-07-14
这样行吗
slect * from A where content like "%=商店名字|%"

[Quote=引用 7 楼 miaojihao 的回复:]
引用 5 楼 zhaoyu0826 的回复:

你那个字段里边,有0=这个东西吗。还是就是“名字|地址|电话这种格式”
要是有0=得想想,要是没有。可以用以下sql

SQL code
select * from A where '|' + content like '%|商店名字|%'


表a
[/Quote]
回复
美人心计1999 2010-07-14
[Quote=引用 10 楼 zhang6464 的回复:]
我不太懂你意思哎,你table是content吧?那没有属性名?比如商店名字是shop_name之类的?
引用 3 楼 miaojihao 的回复:
引用 2 楼 cunningboy 的回复:

SQL code
select * from table where content like '%商店名字%'

这里的content代表某个一个城市所有的商店的记录
content实……
[/Quote]
问题就在这里...商店的属性并没有单独的字段,都是按照格式存在content的字段里面
回复
zhang6464 2010-07-14

我不太懂你意思哎,你table是content吧?那没有属性名?比如商店名字是shop_name之类的?
[Quote=引用 3 楼 miaojihao 的回复:]
引用 2 楼 cunningboy 的回复:

SQL code
select * from table where content like '%商店名字%'

这里的content代表某个一个城市所有的商店的记录
content实际是个字符串,格式是:
0=商店名字1|某街道xx号|021-3333333
1=商店名字2|某街道xx号|021-3222222
2=商店名字3|……
[/Quote]
回复
myhope88 2010-07-14
找规律就行了吧
回复
美人心计1999 2010-07-14
content的格式是这样的:
真对每条记录的content:
0=名字1|地址1|电话1
1=名字2|地址2|电话2
2=名字3|地址3|电话3
字段里没有0=什么...只是存储的时候涉及到一条记录可能有多个店,所以采用这种方式来存储....
回复
美人心计1999 2010-07-14
[Quote=引用 5 楼 zhaoyu0826 的回复:]

你那个字段里边,有0=这个东西吗。还是就是“名字|地址|电话这种格式”
要是有0=得想想,要是没有。可以用以下sql

SQL code
select * from A where '|' + content like '%|商店名字|%'
[/Quote]

表a
回复
zhaoyu0826 2010-07-14
接楼上,如果不能实现你所谓的模糊查询。。只能自定义一个split函数了。。你可以查下mysql split()。相信能解决你的问题。
回复
zhaoyu0826 2010-07-14
你那个字段里边,有0=这个东西吗。还是就是“名字|地址|电话这种格式”
要是有0=得想想,要是没有。可以用以下sql

select * from A where '|' + content like '%|商店名字|%' 


回复
YHL27 2010-07-14
up...
回复
美人心计1999 2010-07-14
[Quote=引用 2 楼 cunningboy 的回复:]

SQL code
select * from table where content like '%商店名字%'
[/Quote]
这里的content代表某个一个城市所有的商店的记录
content实际是个字符串,格式是:
0=商店名字1|某街道xx号|021-3333333
1=商店名字2|某街道xx号|021-3222222
2=商店名字3|某街道xx号|021-5555555
3=商店名字4|某街道xx号|021-5666665
也就是说content里面不仅有商店名字,还有地址,电话.....如果你这样写,假如地址里面有这个关键字,而名字里面没有,是不是也能查出来,
我的意思是仅仅根据商店名查询..
回复
CunningBoy 2010-07-14
select * from table where content like '%商店名字%'
回复
发动态
发帖子
基础编程
创建于2007-09-28

2.1w+

社区成员

从PHP安装配置,PHP入门,PHP基础到PHP应用
申请成为版主
社区公告
暂无公告