关于Php和Mysql哈希表的问题

时间:2009-02-12 04:00:09

标签: php mysql hash hashtable

我是一个新的php和mysql程序员。我正在处理大量数据,将来它会慢慢增长,因此我使用哈希表。我有几个问题:

  1. mysql是否在函数中内置了哈希表?如果是,如何使用?

  2. 经过几天研究哈希表。我简单地知道哈希表是什么,但我无法理解如何开始创建哈希表。我在互联网上看到了很多哈希表代码。其中大多数是在创建哈希表类的第一步。是不是意味着,他们将哈希表值存储在临时表中而不是插入到mysql数据库中?

  3. 问题3,4& 5,示例场景: 用户可以在网站上收集物品。我想使用哈希表来插入和检索用户收集的项目。

    1. [重要]可能的mysql数据库结构是什么样的?

      例如,创建项目和用户表

      item表中的

      包含:item_id,item_name和item_hash_value

      users表中的

      包含:user_id,username,item_name,item_hash_value

      我不确定用户表是否正确?

    2. [重要]在php和mysql中创建哈希表的步骤是什么? (如果有任何示例代码会很棒:))

    3. [重要]如何从哈希表中插入和检索数据?我在谈论php和mysql,所以我希望答案可以是:“你可以使用mysql查询,即从blabla中选择SELECT *”

4 个答案:

答案 0 :(得分:2)

(抱歉斜体,下划线可以触发它们,但我找不到一个好方法在段落中间禁用它。忽略斜体,我不是故意把它们放在那里)

您无需担心在MySQL中使用哈希表。如果你打算在操作它们时在内存中有大量的项目,哈希表是一个很好的数据结构,因为它可以比简单列表更快地找到它。

但是在数据库级别,您不必担心哈希表。弄清楚如何最好地保存和访问记录是MySQL的工作,所以只要你给它正确的信息就会很高兴。

数据库结构

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

每个项目在items表中获得一个(且仅一个)条目。每个用户在users表中获得一个(且仅一个)条目。当用户选择项目时,它将进入用户项目表。例如:

Users:

1 | Bob
2 | Alice
3 | Robert

Items

1 | Headphones
2 | Computer
3 | Beanie Baby

因此,如果Bob选择了耳机并且Robert选择了计算机和豆豆宝宝,那么user_items表将如下所示:

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))

由于users和items表上的user_id和item_id是主键,因此MySQL可以让您快速访问它们,就像hashmap一样。在user_items表中,主键中同时包含user_id和item_id意味着您不会有重复项,并且您应该能够快速访问(item_id上的索引不会受到伤害)。

示例查询

通过此设置,您可以轻松找到想要了解的内容。以下是一些例子:

谁选择了第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

罗伯特选择了多少东西?

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

我想要一个每个用户的列表以及他们选择的内容,按用户名

排序
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

互联网上有许多SQL指南,例如W3C's tutorial

答案 1 :(得分:1)

1)Hashtables确实存在于MySQL中,但用于保持表上键的内部跟踪。 2)Hashtables通过散列数据单元来创建许多不同的键,这些键通过这些键分隔数据,使搜索更容易。哈希表用于查找应该用于显示正确列表以进行搜索的密钥。

例如,您有100个项目,连续搜索100个项目需要10秒钟。如果您知道它们可以按项目类型分开并将其分为25件T恤,25件钟表,一排排手表和一排鞋子。然后,当你需要找到一件T恤时,你只需要搜索25件T恤,然后需要2.5秒。

3)不确定您的问题意味着什么,MySQL数据库是包含数据库中所有行的二进制文件。 4)和#2一样,你需要决定你想要你的钥匙。 5)#2你需要知道你的钥匙是什么。

答案 2 :(得分:1)

如果您认为哈希表是存储数据的正确方法,您可能希望使用键值数据库,如CouchDB而不是MySQL。他们将向您展示如何使用PHP get started

答案 3 :(得分:1)

  

我是一个新的php和mysql程序员。我正在处理大量数据,将来它会慢慢增长,因此我使用哈希表。

了解您的最初目的,使用“memcache”代替,它是最具扩展性的解决方案,同时提供代码中的最小变化,随着数据越来越大,您可以扩展内存缓存服务器。