mysql 一条查询语句。

2016-01-14 11:45:50 +08:00
 ning1022

访问的 url:
http://www.xxx.com/list.php?tag=1
数据库中有个 tag 的字段
存的数据都是( 1 , 2 , 3 ),( 2 , 22 , 44 ),( 1 , 22 , 11 ),( 1 ),( 1 , 23 )( 22 , 33 )。
这个是六条数据,没有括号。

我想获取数据中有 1 的那个文章,把他查询出来。
我想到的方法

SELECT * FROM article WHERE tags like "%1%";(这个是程序现在用的方法,有 bug )
SELECT * FROM article WHERE find_in_set('1', tags);(这个不行,我在想有没有函数可以解决)

有没有类似于

SELECT * FROM article WHERE id=1
SELECT * FROM article WHERE id in (1,2,3,4)

类似的 SQL 语句。
这个功能就类似于 Wordpress 的那个标签。
感觉数据库设计的不是很合理,我在想要不要重新建一个表弄下,但是已经有数据了。

3089 次点击
所在节点    MySQL
15 条回复
Fedor
2016-01-14 12:15:06 +08:00
find_in_set 怎么不行?
chishi
2016-01-14 12:30:40 +08:00
SELECT * FROM article WHERE FIND_IN_SET('1', tags)
yangqi
2016-01-14 12:35:04 +08:00
tag 字段什么格式啊?字符串的话应该不能直接查,能得话效率也不会高的。数据量不大还是重新设计下
chaegumi
2016-01-14 12:36:45 +08:00
select * from article where instr(CONCAT(',', tags, ','), ',1,')>0
zeraba
2016-01-14 12:42:17 +08:00
gdtv
2016-01-14 12:43:54 +08:00
存数据的时候改成
存的数据都是(, 1 , 2 , 3 ,),(, 2 , 22 , 44 ,),(, 1 , 22 , 11 ,),(, 1 ,),(, 1 , 23 ,)(, 22 , 33 ,)
查询的时候用
SELECT * FROM article WHERE tags like "%,1,%";
lyz1990
2016-01-14 13:19:46 +08:00
还好我们的 tag 都是存在 post_tag 表里的, 蛤蛤~
fising
2016-01-14 13:23:08 +08:00
怎么那么多人宣传 xxx.com 这个色情站?他们是什么背景?
jayki
2016-01-14 13:28:57 +08:00
数据不多的话,还是重新设计一下表吧。如果要查询数据库中同时有 1 和 2 的文章,成本好高。
zi
2016-01-14 13:36:44 +08:00
SELECT * FROM article WHERE find_in_set('1', tags)<>0;
find_in_set 返回的是查找字符在字符串的位置
wd0g
2016-01-14 13:40:14 +08:00
新做一个关系表呗,
文章 ID,标签 ID

select * from guanxi where tagId = 1 or tagId = 2

在通过查询的记录把文章查出来

不知道可不可以
cevincheung
2016-01-14 14:14:56 +08:00
重新建标,新的数据扔新表,旧的数据慢慢导过去……
LioMore
2016-01-14 14:15:41 +08:00
@fising 我去,还真的是
nikubenki
2016-01-14 21:14:03 +08:00
@fising 这网站至少十来年了吧
nikubenki
2016-01-14 21:24:38 +08:00
不满足第一范式

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/250668

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX