Понедельник, 18 Ноября 2024, 17:57

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Как рационально создать бд инвентаря?
SektoidДата: Суббота, 30 Июля 2011, 04:32 | Сообщение # 1
почетный гость
Сейчас нет на сайте
Я решил что у меня в бд будет две таблицы. Первая - шмотки, вторая - инвентари. Первая будет содержать просто шмотки, которые есть в игре. Вторая уже будет для того, чтоб отображать какие шмотки в инвентаре игроков. Потому что шмотки могут быть и на земле, и в сундуке. Но для этого я создам потом другие таблицы.

Первая таблица:
item_id INT auto_increment
item_odeto INT(1) DEFAULT 0
прочность
бонусы
название
тип
вес

тут вроде все понятно

а теперь Вторая таблица:
inventar_id INT auto_increment
items_ids ????????? (как сделать так, чтоб в одной строчке можно было высветить весь список item_id игрока?)
текущий вес инвентаря
максимальный вес

Или предлогайте свои варианты wink


Сообщение отредактировал Sektoid - Суббота, 30 Июля 2011, 04:35
maker-rusДата: Суббота, 30 Июля 2011, 06:10 | Сообщение # 2
Гений
Сейчас нет на сайте
Очень легко дорогой Sektoid, делается это так.
1. Где то сохраняется (в сессии, в куках, в get запросе) id игрока.
2. В запрос по выводу всего инвентаря подставляется id, вот запрос.
2.1 Допустим название первой таблицы itemPlayer, а id игрока храним в get запросе.
Code
$idUser = $_GET['id'];
$all_items = mysql_query("SELECT * FROM itemPlayer WHERE id=$idUser") or die("Error sql: ".mysql_error());

3. Мы получили список всех вещей, следом выводим их игроку.
Code

while($item = mysql_fetch_array($all_items))
{
         echo $item['item_id'];
}


Или как я понял надо делать по другому
1. Получаем id игрока.
2. Например название первой таблицы items, а второй invent. И допустим что в первой таблице есть поле где храниться id игрока которое имеет название idPitem.
Code

$userID = $_GET['id'];
$sql = mysql_query("SELECT * FROM items WHERE idPitem = $userID ") or die("Error sql: ".mysql_error());

3. Дальше мы записываем данные в массив.
Code
$item = mysql_fetch_array($sql);

4. Записываем это все в таблицу 2 (invent).
Code

$inven_item = $item['item_id'];
$insertItem = mysql_query("INSERT INTO invent ('items_ids') VALUES ('$inven_item') ") or die("Error sql: ".mysql_error());

5. Готово happy


Сообщение отредактировал maker-rus - Суббота, 30 Июля 2011, 06:28
SektoidДата: Суббота, 30 Июля 2011, 13:37 | Сообщение # 3
почетный гость
Сейчас нет на сайте
Quote (maker-rus)
4. Записываем это все в таблицу 2 (invent).
Code

$inven_item = $item['item_id'];
$insertItem = mysql_query("INSERT INTO invent ('items_ids') VALUES ('$inven_item') ") or die("Error sql: ".mysql_error());


Тоесть значения inven_item будут в строчке items_ids тупо через запятую или как? И много ли значений туда можно будет вставить? Я не хочу ограничивать инвентарь игроков количеством шмота. И каким должен тогда быть столбец items_ids? CHAR?


Сообщение отредактировал Sektoid - Суббота, 30 Июля 2011, 14:05
AssasinДата: Суббота, 30 Июля 2011, 14:16 | Сообщение # 4
web-coder
Сейчас нет на сайте
Quote (Sektoid)

items_ids ????????? (как сделать так, чтоб в одной строчке можно было высветить весь список item_id игрока?)

Можно просто строку записывать типо 43|5443|324|5222|654
Номера это id шмотки, а | разделитель, но это геморно. Думаю лучше использовать 3 таблицы. В первой все шмотки:
Code
item_id INT auto_increment
item_odeto INT(1) DEFAULT 0
прочность
бонусы
название
тип
вес


Во второй:
Code
inventar_id INT auto_increment
id_user - id игрока
текущий вес инвентаря
максимальный вес


В третьей будет список всех шмоток которые есть у всех игроков:
Code

tbl_id INT auto_increment
id_user - id игрока
id_item - id шмотки


Затем что бы узнать какие шмотки у игрока есть, достаточно такого кода:
Code

$sel = mysql_query("SELECT * FROM (SELECT * FROM вторая таблица) as tbl_two, третья таблица WHERE tbl_two.id_user=третья таблица.id_user");
while ($row = mysql_fetch_array($sel)) {
echo $row['id_item']; //выведет id шмотки с 3 таблицы
}

Имея id шмотки игрока дальше можешь манипулировать как хочешь ими.
SektoidДата: Суббота, 30 Июля 2011, 15:07 | Сообщение # 5
почетный гость
Сейчас нет на сайте
Вобщем сделал так и понял что это ненужно. Решил сделать проще.
Будет всего одна таблица Items. В ней будет:

item_id INT auto_increment
owner_id (будет равняться user_id и при передаче вещи кому-то будет меняться)
sector_id (если шмотку выкинули на землю)
возможность одеть
одето или нет
прочность
бонусы
вес

а вес инвентаря и максимальный вес пихну в статы юзера

выглядеть будет так:
Code
$user_id = $_GET['id'];  
$items_in_bag = mysql_query("SELECT * FROM Items WHERE owner_id=$user_id")

Всем спасибо за советы
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг