› MySQL 5.5 Community Server
› MySQL 5.6 Community Server
› Percona Configuration Wizard
› XtraBackup 搭建主从复制
Great Sites on MySQL
› Percona
› MySQL Performance Blog
› Severalnines
推荐管理工具
› Sequel Pro
› phpMyAdmin
推荐书目
› MySQL Cookbook
MySQL 相关项目
› MariaDB
› Drizzle
参考文档
› http://mysql-python.sourceforge.net/MySQLdb.html
ning1022
V2EX  ›  MySQL

mysql 一条查询语句。

  •  
  •   ning1022 · Jan 14, 2016 · 3968 views
    This topic created in 3927 days ago, the information mentioned may be changed or developed.

    访问的 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 的那个标签。
    感觉数据库设计的不是很合理,我在想要不要重新建一个表弄下,但是已经有数据了。

    15 replies  •  2016-01-14 21:24:38 +08:00
    Fedor
        1
    Fedor  
       Jan 14, 2016
    find_in_set 怎么不行?
    chishi
        2
    chishi  
       Jan 14, 2016
    SELECT * FROM article WHERE FIND_IN_SET('1', tags)
    yangqi
        3
    yangqi  
       Jan 14, 2016
    tag 字段什么格式啊?字符串的话应该不能直接查,能得话效率也不会高的。数据量不大还是重新设计下
    chaegumi
        4
    chaegumi  
       Jan 14, 2016
    select * from article where instr(CONCAT(',', tags, ','), ',1,')>0
    zeraba
        5
    zeraba  
       Jan 14, 2016 via Android
    gdtv
        6
    gdtv  
       Jan 14, 2016
    存数据的时候改成
    存的数据都是(, 1 , 2 , 3 ,),(, 2 , 22 , 44 ,),(, 1 , 22 , 11 ,),(, 1 ,),(, 1 , 23 ,)(, 22 , 33 ,)
    查询的时候用
    SELECT * FROM article WHERE tags like "%,1,%";
    lyz1990
        7
    lyz1990  
       Jan 14, 2016
    还好我们的 tag 都是存在 post_tag 表里的, 蛤蛤~
    fising
        8
    fising  
       Jan 14, 2016
    怎么那么多人宣传 xxx.com 这个色情站?他们是什么背景?
    jayki
        9
    jayki  
       Jan 14, 2016
    数据不多的话,还是重新设计一下表吧。如果要查询数据库中同时有 1 和 2 的文章,成本好高。
    zi
        10
    zi  
       Jan 14, 2016
    SELECT * FROM article WHERE find_in_set('1', tags)<>0;
    find_in_set 返回的是查找字符在字符串的位置
    wd0g
        11
    wd0g  
       Jan 14, 2016
    新做一个关系表呗,
    文章 ID,标签 ID

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

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

    不知道可不可以
    cevincheung
        12
    cevincheung  
       Jan 14, 2016
    重新建标,新的数据扔新表,旧的数据慢慢导过去……
    LioMore
        13
    LioMore  
       Jan 14, 2016
    @fising 我去,还真的是
    nikubenki
        14
    nikubenki  
       Jan 14, 2016
    @fising 这网站至少十来年了吧
    nikubenki
        15
    nikubenki  
       Jan 14, 2016
    不满足第一范式
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1555 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 40ms · UTC 16:34 · PVG 00:34 · LAX 09:34 · JFK 12:34
    ♥ Do have faith in what you're doing.