Как сделать гибкую таксономию на php

12
M
На сайте с 13.07.2012
Offline
174
1489

Занимаюсь разработкой своего игрового проекта. Движок пишут сам. Так как программировать на пхп я умею очень слабо, то прошу подсказать знающих людей как можно организовать такую штуку:

Нужно сделать что-то типо таксономии. То есть есть запись(в моем случае это игра), и у неё есть поле "платформы", в котором вписаны все игровые платформы которые она поддерживает. Пока-что я сделал в базе данных mysql обычное текстовое поле и в него вписываю. Но есть задача сделать, чтобы каждая платформа(отдельное слово) на странице с игрой была в виде ссылки, и нажав её выводились все игры, в которых она обозначена. То есть с выводом связанных с нею игр проблем думаю не будет.

Вот сама проблема, как сделать само поле в базе данных, в котором будут вписаны все поддерживаемые платформы, то есть обычное текстовое поле не годиться, а нужно чтобы они были бы как то разделены. Может кто подскажет?

Оптимизайка
На сайте с 11.03.2012
Offline
396
#1

не должно быть "поля со всеми платформами", а должна быть отдельная таблица. master - detail.

⭐ BotGuard (https://botguard.net) ⭐ — защита вашего сайта от вредоносных ботов, воровства контента, клонирования, спама и хакерских атак!
M
На сайте с 13.07.2012
Offline
174
#2
Оптимизайка:
не должно быть "поля со всеми платформами", а должна быть отдельная таблица. master - detail.

Да, я это понимаю. Таблицу с платформами сделать не проблем. А вот как в самой записи с игрой сделать поля, в котором надо вставить эти самые платформы?

---------- Добавлено 11.12.2014 в 23:48 ----------

Оптимизайка:
master - detail.

Это что такое? можно подробней? В гугле на русском ничего не нашел с этим связанного.

totamon
На сайте с 12.05.2007
Offline
437
#3
mariux:
Занимаюсь разработкой своего игрового проекта. Движок пишут сам. Так как программировать на пхп я умею очень слабо, то прошу подсказать знающих людей как можно организовать такую штуку:

похвально конечно, для любителей изобретать велосипеды, но может стоит взять какой-то движек мало известный или широко известный и его кромсать?))


Нужно сделать что-то типо таксономии. То есть есть запись(в моем случае это игра), и у неё есть поле "платформы", в котором вписаны все игровые платформы которые она поддерживает. Пока-что я сделал в базе данных mysql обычное текстовое поле и в него вписываю. Но есть задача сделать, чтобы каждая платформа(отдельное слово) на странице с игрой была в виде ссылки, и нажав её выводились все игры, в которых она обозначена. То есть с выводом связанных с нею игр проблем думаю не будет.
Вот сама проблема, как сделать само поле в базе данных, в котором будут вписаны все поддерживаемые платформы, то есть обычное текстовое поле не годиться, а нужно чтобы они были бы как то разделены. Может кто подскажет?

надеяюсь вы уже освоили связные таблицы? в базе создаете отдельную таблицу вида

platformid //ИД платформы

platformname // название платформы

platformdescr // описание платформы или любой текст который пригодится на странице

в таблице где храните игры добавляете поле platformid в которой происходит связь игры и платформы.

Домены и хостинг https://8fn.ru/regru | Дедик от 3000р https://8fn.ru/73 | VPS в Москве https://8fn.ru/72 | Лучшие ВПС, ТП огонь, все страны! https://8fn.ru/inferno | ХОСТИНГ №1 РОССИИ https://8fn.ru/beget
M
На сайте с 13.07.2012
Offline
174
#4
totamon:
похвально конечно, для любителей изобретать велосипеды, но может стоит взять какой-то движек мало известный или широко известный и его кромсать?))

Конечно пробовал. Ничего не получилось.


надеяюсь вы уже освоили связные таблицы? в базе создаете отдельную таблицу вида
platformid //ИД платформы
platformname // название платформы
platformdescr // описание платформы или любой текст который пригодится на странице

в таблице где храните игры добавляете поле platformid в которой происходит связь игры и платформы.

Да это всё понятно, вопрос в другом, как добавить несколько таких platformid к игре.

totamon
На сайте с 12.05.2007
Offline
437
#5
Да, я это понимаю. Таблицу с платформами сделать не проблем. А вот как в самой записи с игрой сделать поля, в котором надо вставить эти самые платформы?

чего там сложного? селектом берете все платформы из отдельной таблицы и вставляте в форму


$inq = mysql_query("SELECT * FROM ".$basepref."_platform");
echo "<select name=\"platform\">";
while($item = mysql_fetchrow($inq)){
echo "<option values=\"".$item['platformid ']."\">".$item['platformname ']." </option>";
}
echo "</select>";


---------- Добавлено 12.12.2014 в 01:16 ----------

сохраняете эти значения в таблице с игрой $_POST['platform '] это ИД платформы

---------- Добавлено 12.12.2014 в 01:24 ----------

mariux:
Конечно пробовал. Ничего не получилось.


Да это всё понятно, вопрос в другом, как добавить несколько таких platformid к игре.

для этого и стоит посмотреть как в нормальных это движках реализовано? в программировании не главное знать десять-двадцать операторов языка, главное понимать как составить алгоритм... по моему в любой статье в яндексе задать "php и mysql" выйдет урок как связанные таблицы создавать и выводить, это основа основ... категории как вывести? у вас кроме платформ игры наверно делятся на стрелялки, гонялки, стратегии и тд?

M
На сайте с 13.07.2012
Offline
174
#6
totamon:
чего там сложного? селектом берете все платформы из отдельной таблицы и вставляте в форму

$inq = mysql_query("SELECT * FROM ".$basepref."_platform");
echo "<select name=\"platform\">";
while($item = mysql_fetchrow($inq)){
echo "<option values=\"".$item['platformid ']."\">".$item['platformname ']." </option>";
}
echo "</select>";

Это добавит только одну платформу, а мне надо несколько. по этому не вариант. или я ошибаюсь? Сам вопрос, как ихз правильно записать втаблице и как вывести на страницу. Как записать через форму это уже не проблемма)🍿

totamon
На сайте с 12.05.2007
Offline
437
#7
mariux:
Это добавит только одну платформу, а мне надо несколько. по этому не вариант. или я ошибаюсь? Сам вопрос, как ихз правильно записать втаблице и как вывести на страницу. Как записать через форму это уже не проблемма)🍿

дак почему одну платформу?? у вас под платформы отдельная таблица в которую вы пишете сколько угодно платформ... платформы с играми связаны через ИД платформы, отдельная страница для добавления платформ, отдельно в играх связь платформ с игрой...

в чем смысл таксономии вообще? вы используте это слово, но не понимаете что оно означает? или как оно реализуется? это связанные зависимые данные... сущности хранятся в разных таблицах и связываются через ИД (индентификатор), структура может быть и сложнее чем я описал... в вашем случае как минимум еще кроме платформ должна быть еще таблица категорий, а с игрой они связаны через ИД платформы и ИД категории

Mad_Man
На сайте с 10.11.2008
Offline
162
#8
mariux:
Это добавит только одну платформу, а мне надо несколько. по этому не вариант. или я ошибаюсь? Сам вопрос, как ихз правильно записать втаблице и как вывести на страницу. Как записать через форму это уже не проблемма)

Таблица-прослойка.

games (список игр, обязательно наличие поля id/int)

games_platforms (список платформ вида id/int, name/varchar)

games_platforms_list (список вида game_id/int, platform_id/int)

В последней таблице записи будут вида

1 - 2

1 - 3

1 - 7

2 - 5

2 - 6

... где первое значение - id записи из таблицы games, второе - id записи из таблицы games_platforms. На странице с игрой будет два запроса: первый вытягивает основную инфу по игре, второй селектит из games_platforms_list записи, которые относятся к данной игре (game_id). Для получения человеческих названий вместо поля platform_id нужен LEFT JOIN.

Особо упоротые также могут использовать битовые маски, размечая под каждый бит хранимого числа определённую категорию.

M
На сайте с 13.07.2012
Offline
174
#9
totamon:
дак почему одну платформу?? у вас под платформы отдельная таблица в которую вы пишете сколько угодно платформ... платформы с играми связаны через ИД платформы, отдельная страница для добавления платформ, отдельно в играх связь платформ с игрой...
в чем смысл таксономии вообще? вы используте это слово, но не понимаете что оно означает? или как оно реализуется? это связанные зависимые данные... сущности хранятся в разных таблицах и связываются через ИД (индентификатор), структура может быть и сложнее чем я описал... в вашем случае как минимум еще кроме платформ должна быть еще таблица категорий, а с игрой они связаны через ИД платформы и ИД категории

Ладно, я не буду вас напрягать) Догадался до одного способа при помощи if else. То есть если в поле pc стоит ноль, то платформу не показывает, если 1 то показывает. И так по аналогии создам поля для других платформ. Вот таким простым методом я решил свой вопрос. Спасибо за помощь):)

---------- Добавлено 12.12.2014 в 00:50 ----------

Mad_Man:
Таблица-прослойка.

games (список игр, обязательно наличие поля id/int)
games_platforms (список платформ вида id/int, name/varchar)
games_platforms_list (список вида game_id/int, platform_id/int)

В последней таблице записи будут вида

1 - 2
1 - 3
1 - 7
2 - 5
2 - 6

... где первое значение - id записи из таблицы games, второе - id записи из таблицы games_platforms. На странице с игрой будет два запроса: первый вытягивает основную инфу по игре, второй селектит из games_platforms_list записи, которые относятся к данной игре (game_id). Для получения человеческих названий вместо поля platform_id нужен LEFT JOIN.

Спасибо за подсказку, потом попробую и такой вариант для практики)

---------- Добавлено 12.12.2014 в 00:55 ----------

totamon:

в чем смысл таксономии вообще? вы используте это слово, но не понимаете что оно означает?

Может быть слово таксономия тут и не к месту) извиняюсь, просто вот привык к нему:)

totamon
На сайте с 12.05.2007
Offline
437
#10
Mad_Man:
Таблица-прослойка.

games (список игр, обязательно наличие id/int)
games_platforms (список платформ вида id/int, name/varchar)
games_platforms_list (список вида game_id/int, platform_id/int)

В последней таблице записи будут вида

1 - 2
1 - 3
1 - 7
2 - 5
2 - 6

... где первое значение - id записи из таблицы games, второе - id записи из таблицы games_platforms.

это может более правильный вариант, но уже для далнейшей нормализации базы данных и с вариантом когда для одной игры несколько платформ привязано.

отдельная таблица связи делается для того чтобы правильно делать выборки данных.

те если у вас несколько платформ возможно для игры, вs делаете мульти селект и в таблицу игры пишете данные ИД платформ в виде строки "1,3,6", и плюс к этому пишете в связанную таблицу ИДигры-ИДплатформы

idgame idplatform

1 1

1 3

1 6

например...

это делается для того чтобы если вы захотите сделать сортировку по платформам и выводить на странице платфрмы с ИД 3, то делаете выборку по этой таблице с LEFT JOIN таблицы игр, на странице игры делаете список платформ с выборкой idplatform IN('1,3,6')

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий