dqhnp44220 2013-01-29 01:58
浏览 20
已采纳

MySQL在文本中搜索行

in MySQL, I have a row for each user, with a column that contains friends names separated by .

eg.
Friend1
Friend2
Friend3

I'd like to be able to quickly search all the users where the Friends field contains Friend2.

I've found FIND_IN_SET but that only works for commas and the data can contains commas and foreign characters.

Obviously searching with regular expressions and the such will be slow. I'm new to the whole cross referencing so I'd love some help on the best way to structure the data so that it can be found quickly.

Thanks in advance.

Edit: Ok, I forgot to mention a point that the data is coming from a game where friends names are stored locally and there are no links to another users ID. Thus the strings. Every time they connect I am given a dump of their friends names which I use in the background to help match games.

  • 写回答

3条回答 默认 最新

  • duanfan5012 2013-01-29 02:03
    关注

    The most commonly used structure for this kind of data is usually adding an extra table. I.e.

    user
        id,
        name
        email,
        e.t.c.
    
    user_friend
        user_id
        friend_id
    

    Querying this is a matter of querying the tables. I.e.

    List all of a users friends names:

    SELECT friend_id
    FROM user_friend 
    WHERE user_id = :theUser
    

    Edit: Regarding OPs edit. Just storing the names is possible too. In this case the table structure would become:

    user_friend
        user_id
        friend_name
    

    and the query:

    SELECT friend_name 
    FROM user_friend 
    WHERE user_id = :theUser
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?