(извините за курсив, подчеркивание может вызвать их, но я не могу найти хороший способ отключить это в середине абзаца. Игнорировать курсив, я не хотел их там указывать)
Вам не нужно беспокоиться об использовании хеш-таблицы с 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
Каждый элемент получает одну (и только одну) запись в таблице элементов. Каждый пользователь получает одну (и только одну) запись в таблице пользователей. Когда пользователь выбирает элемент, он попадает в таблицу элементов пользователя. Пример:
Users:
1 | Bob
2 | Alice
3 | Robert
Items
1 | Headphones
2 | Computer
3 | Beanie Baby
Так что, если Боб выбрал наушники, а Роберт выбрал компьютер и beanie baby, таблица 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))
Поскольку user_id и item_id в таблицах users и items являются первичными ключами, MySQL позволит вам очень быстро получить к ним доступ, подобно хэш-карте. В таблице 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 .