duaedf6509 2009-02-12 04:00
浏览 38
已采纳

关于Php和Mysql哈希表的问题

I am a new php and mysql programmer. I am handling quite large amount of data, and in future it will grow slowly, thus I am using hash table. I have couple of questions:

  1. Does mysql have hash table built in function? If yes, how to use that?

  2. After couple of days doing research about hash table. I briefly know what hash table is but I just could not understand how to start creating one. I saw a lot of hash table codes over the internet. Most of them, in the first step in to create a hashtable class. Does it mean, they store the hash table value in the temporary table instead of insert into mysql database?

For questions 3,4 & 5, example scenario: User can collect items in the website. I would like to use hash table to insert and retrieve the items that the user collected.

  1. [Important] What are the possible mysql database structure looks like?

    e.g, create items and users table

    in items table have: item_id, item_name, and item_hash_value

    in users table have: user_id, username, item_name, item_hash_value

    I am not sure if the users table is correct?

  2. [Important] What are the steps of creating hash table in php and mysql? (If there is any sample code would be great :))

  3. [Important] How to insert and retrieve data from hash table? I am talking about php and mysql, so I hope the answers can be like: "you can use mysql query i.e SELECT * from blabla..."

  • 写回答

4条回答 默认 最新

  • douzhao7014 2009-02-12 16:40
    关注

    (sorry about the italics, underscores can trigger them but I can't find a good way to disable that in the middle of a paragraph. Ignore the italics, I didn't mean to put them there)

    You don't need to worry about using a hashtable with MySQL. If you intend to have a large number of items in memory while you operate on them a hashtable is a good data structure to use since it can find things much faster than a simple list.

    But at the database level, you don't need to worry about the hashtable. Figuring out how to best hold and access records is MySQL's job, so as long as you give it the correct information it will be happy.

    Database Structure

    items table would be: item_id, item_name
    Primary key is item_id
    
    users table would be: user_id, username
    Primary key is user_id
    
    user_items table would be: user_id, item_id
    Primary key is the combination of user_id and item_id
    Index on item_id
    

    Each item gets one (and only one) entry in the items table. Each user gets one (and only one) entry in the users table. When a user selects an item, it goes in the user items table. Example:

    Users:
    
    1 | Bob
    2 | Alice
    3 | Robert
    
    Items
    
    1 | Headphones
    2 | Computer
    3 | Beanie Baby
    

    So if Bob has selected the headphones and Robert has selected the computer and beanie baby, the user_items table would look like this:

    User_items (user_id, item_id)
    
    1 | 1    (This shows Bob (user 1) selected headphones (item 1))
    3 | 2    (This shows Robert (user 3) selected a computer (item 2))
    3 | 3    (This shows Robert (user 3) selected a beanie baby (item 3))
    

    Since the user_id and item_id on the users and items tables are primary keys, MySQL will let you access them very fast, just like a hashmap. On the user_items table having both the user_id and item_id in the primary key means you won't have duplicates and you should be able to get fast access (an index on item_id wouldn't hurt).

    Example Queries

    With this setup, it's really easy to find out what you want to know. Here are some examples:

    Who has selected item 2?

    SELECT users.user_id, users.user_name FROM users, user_items
    WHERE users.user_id = user_items.user_id AND user_items.item_id = 2
    

    How many things has Robert selected?

    SELECT COUNT(user_items.item_id) FROM user_items, users
    WHERE users.user_id = user_items.user_id AND users.user_name = 'Robert'
    

    I want a list of each user and what they've selected, ordered by the user name

    SELECT user.user_name, item.item_name FROM users, items, user_items
    WHERE users.user_id = user_items.user_id AND items.item_id = user_items.item_id
    ORDER BY user_name, item_name
    

    There are many guides to SQL on the internet, such as the W3C's tutorial.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥200 csgo2的viewmatrix值是否还有别的获取方式
  • ¥15 Stable Diffusion,用Ebsynth utility在视频选帧图重绘,第一步报错,蒙版和帧图没法生成,怎么处理啊
  • ¥15 请把下列每一行代码完整地读懂并注释出来
  • ¥15 pycharm运行main文件,显示没有conda环境
  • ¥15 寻找公式识别开发,自动识别整页文档、图像公式的软件
  • ¥15 为什么eclipse不能再下载了?
  • ¥15 编辑cmake lists 明明写了project项目名,但是还是报错怎么回事
  • ¥15 关于#计算机视觉#的问题:求一份高质量桥梁多病害数据集
  • ¥15 特定网页无法访问,已排除网页问题
  • ¥50 如何将脑的图像投影到颅骨上