Меню

Поиск тегов в таблице MySQL с переполнением стека



PHP Создание таблиц MySQL

Таблица базы данных имеет свое уникальное имя и состоит из столбцов и строк.

Создание таблицы MySQL с помощью mysqli и PDO

Инструкция CREATE TABLE используется для создания таблицы в MySQL.

Создадим таблицу с именем «мигуестс» с пятью колонками: «ID», «имя», «Фамилия», «Email» и «рег_дате»:

Примечания к таблице выше:

Тип данных определяет тип данных, которые может содержать столбец. Для полной ссылки на все доступные типы данных перейдите на Ссылки на типы данных.

После того как тип данных, можно указать другие необязательные атрибуты для каждого столбца:

  • NOT NULL — Каждая строка должна содержать значение для этого столбца, значения NULL не допускаются
  • DEFAULT value — Установите значение по умолчанию, которое добавляется, когда не передается другое значение
  • UNSIGNED — Используется для числовых типов, ограничивает хранимые данные положительными числами и нулем
  • AUTO INCREMENT — MySQL автоматически увеличивает значение поля на 1 каждый раз при добавлении новой записи
  • PRIMARY KEY — Используется для уникальной идентификации строк в таблице. Столбец с параметром первичного ключа часто является идентификационным номером и часто используется с ауто_инкремент

Каждая таблица должна иметь столбец первичного ключа (в данном случае: столбец «ID»). Его значение должно быть уникальным для каждой записи в таблице.

В следующих примерах показано, как создать таблицу в PHP:

Пример (mysqli объектно-ориентированный)

connect_error) <
die(«Connection failed: » . $conn->connect_error);
>

// sql to create table
$sql = «CREATE TABLE MyGuests (
id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
firstname VARCHAR(30) NOT NULL,
lastname VARCHAR(30) NOT NULL,
email VARCHAR(50),
reg_date TIMESTAMP
)»;

if ($conn->query($sql) === TRUE) <
echo «Table MyGuests created successfully»;
> else <
echo «Error creating table: » . $conn->error;
>

Источник

Поиск тегов в таблице MySQL с переполнением стека

У меня есть таблица с некоторыми представлениями, эта таблица имеет tags поле, и мне нужно искать в нем.

Данные сохраняются в формате JSON в таблице, например так: [«basic»,»example»,»html»,»chart»]

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

Пользователь отправляет тег для поиска, например: html Затем мне нужно найти все строки для этого тега, без особых накладных расходов.

Я знаю, что большинство людей говорят: что ты пробовал сам?
— ну ничего. Поскольку я понятия не имею, как это сделать, я знаю, как искать в SQL и все такое. но никогда не пробовал это в этой логике.

Решение

Нет лучшего способа поиска в этом формате. Там нет никакого способа вообще.

Не удивительно, что вы понятия не имеете, как это сделать. Я скажу вам больше — никто этого не знает. Теги никогда не должны храниться в формате JSON. Это похоже на то, как если бы вы построили машину, поместив колеса на крышу. А потом приходят спрашивать, как на нем ездить.

Читайте также:  Ищите ответ на вопрос о том какой корм для кур несушек лучше Мы расскажем вам об этом

Сначала вы должны изучить основы базы данных. А затем создайте свои таблицы надлежащим образом. делая отдельная таблица для тегов. Хранение каждого в отдельном ряду. После этого вы сможете искать теги обычным способом, используя запрос JOIN, чтобы прикрепить соответствующие записи к результату.

Другие решения

Вы должны взглянуть на полнотекстовый индекс MySQL.
Посмотрите в руководство и это Статья Zend Developer

Но вы не должны использовать полнотекстовый поиск для многих столбцов.
В одном из моих проектов я работал вокруг него, объединяя поиск столбцов в столбце TEXT и применяя его к полнотекстовому индексу.

Вы должны создать другую таблицу tag с полями name , post_id ,
Я считаю, что это лучшее решение для поиска.

Если у вас нет разрешения на создание таблицы базы данных. Это зависит от того, сколько сообщений у вас есть. немного? сотни или даже больше? Если в вашем посте нет огромных строк. Вы можете получить их все и декодировать в PHP Array, а затем использовать сравнение строк.

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

Но вы также можете использовать ненадежный способ, используя like Оператор в MySQL.

Это просто, вы можете попробовать использовать как запрос

Источник

MySQL — как хранить ключевые слова (теги) к посту блога?

При добавлении поста в блог, можно будет вводить ключевые слова (точно так же как тут)

Ключевые слова будут храниться в отдельной таблице

Обратите внимание на md5 ключевого слова, этоя сделал чтобы быстрее сверять есть ключевое слово в базе или еще нет, правильное решение пришло мне на ум или есть кто умнее что изобрел?

Вторая таблица такая

Главный вопрос в том как хранить запись ключевые слова

Целесообразно ли допустим хранить в таком формате с разделителем

где id это из первой таблицы номера

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

В общем народу будет дофига, нужно чтобы это не грузило базу, как лучше сделать?

2 ответа 2

Всего будет три таблицы: prfx_posts, prfx_tags, prfx_posts_tags

В таблице prfx_tags храним id тега и его название. Это будет таблица со списком возможных тегов.

В таблице prfx_posts_tags храним id поста и id тега соответствущего посту. Здесь может быть несколько тегов для оного поста, то бишь для одного post_id может быть несколько tag_id вида:

tag_id это внешний ключ для таблицы prfx_tags , post_id — для prfx_posts_tags .

Структура — prfx_tags:

Структура — prfx_posts:

Структура — prfx_posts_tags :

По поводу оптимизации:

  1. Выбираем тип таблицы или MyISAM или InnoDB, InnoDB хорош тем, что есть обновление / удаление записей по ключам в данном случае, но он тормоз из-за транзакций и т.д. Берём MyISAM.
  2. Создаём индексы для колонок.
  3. Аккуратно выбираем типы клонок.
  4. Аккуратно выбираем длинну полей.
Читайте также:  Этимология Схоластическое воззрение на науку Схоластическая метафизика

По поводу логику:

При добавлении поста в БД пользователю должны предлагаться теги из таблицы prfx_tags Когда он добавляет пост данные заносятся в две таблицы: в prfx_posts и в prfx_posts_tags В prfx_posts_tags летит id поста в колонку post_id и id тега в tag_id

Откуда брать теги? Либо самому создать базу тегов, либо ещё и дать возможность пользователю их добавлять в prfx_tags без повторений, второе сложнее =)

И на последок:

  1. Нужно следить за ссылочной целостностью в БД. Так как при удалении тега в таблице prfx_tags остаются ссылки / записи на него в таблице prfx_posts_tags — их так же нужно удалять.
  2. Нужно ли объяснить SQL запрос на выборку?

Источник

PHP Создание таблиц MySQL

В этом уроке вы узнаете, как создавать таблицы в базе данных MySQL с помощью PHP.

Создание таблиц с помощью SQL

В предыдущем уроке мы узнали, как создать базу данных на сервере MySQL. Шаги по созданию таблицы аналогичны созданию баз данных. Разница в том, что вместо создания новой базы данных мы подключимся к существующей базе данных и создадим таблицу в этой базе данных. Для подключения к существующей базе данных мы можем передать дополнительную переменную «имя базы данных» при подключении к MySQL.

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

Новые таблицы добавляются в существующую базу данных с помощью оператора SQL CREATE TABLE .

За оператором CREATE TABLE следует имя создаваемой таблицы, за которым следует список имен и определений каждого столбца таблицы, разделенный запятыми.

Мы создадим таблицу с именем «persons» и столбцами: «id», «first_name», «last_name» и «email»:

После выбора базы данных в следующем примере создается таблица с именем «persons» и столбцами: «id», «first_name», «last_name» и «email». В first_name, last_name и email столбцы должны содержать значение (т.е. NOT NULL). Столбец id имеет целочисленное значение, которое имеет автоматическое приращение (AUTO_INCREMENT):

Пояснения к таблице:

Обратите внимание, что за каждым именем поля следует объявление типа данных — это объявление указывает, какой тип данных может содержать столбец, будь то целое число, строка, дата и т.д.

В таблице выше используются следующие типы данных:

  1. VARCHAR: содержит строку переменной длины, которая может содержать буквы, числа и специальные символы. Максимальный размер указан в скобках.
  2. INT: тип данных INTEGER принимает числовые значения с подразумеваемой шкалой нуля. Он хранит любое целое число от -2147483648 до 2147483647.
Читайте также:  Лекция 2 Основные типы правопонимания и правовые теории

После типа данных вы можете указать другие необязательные атрибуты для каждого столбца:

  • NOT NULL — каждая строка должна содержать значение для этого столбца, нулевые значения не допускаются.
  • DEFAULT — установите значение по умолчанию, которое добавляется, когда не передается никакое другое значение.
  • UNSIGNED — используется для числовых типов, ограничивает хранимые данные положительными числами и нулем.
  • AUTO INCREMENT — MySQL автоматически увеличивает значение поля на 1 каждый раз, когда добавляется новая запись.
  • PRIMARY KEY — используется для однозначной идентификации строк в таблице. Столбец с настройкой PRIMARY KEY часто является идентификационным номером и часто используется с AUTO_INCREMENT.

Каждая таблица должна иметь столбец первичного ключа (в данном случае столбец «id»). Его значение должно быть уникальным для каждой записи в таблице.

Понимание значений NULL и NOT NULL

Если для столбца указано значение NULL, то в базу данных можно добавить строку, если этому столбцу не присвоено значение. И наоборот, если столбец определен как NOT NULL, то перед добавлением строки в таблицу ему должно быть присвоено значение.

Первичный ключ PRIMARY KEY

Первичный ключ — это столбец, используемый для идентификации отдельных записей в таблице. Значение столбца первичного ключа должно быть уникальным в контексте таблицы, в которой он существует, или, если несколько столбцов объединены, чтобы составить первичный ключ, комбинация значений ключа должна быть уникальной для каждой строки.

Первичный ключ определяется с помощью оператора PRIMARY KEY во время создания таблицы. Если используется несколько столбцов, они разделяются запятыми:

Автоматическое приращение AUTO_INCREMENT

AUTO_INCREMENT — одно из самых простых, но наиболее полезных определений столбцов в языке SQL. По сути, когда столбец определяется с помощью AUTO_INCREMENT, значение столбца автоматически увеличивается каждый раз, когда в таблицу добавляется новая строка. Это особенно полезно при использовании столбца в качестве первичного ключа. Используя AUTO_INCREMENT, нет необходимости писать операторы SQL для вычисления нового уникального идентификатора для каждой строки. Все это обрабатывается сервером MySQL при добавлении строки.

При использовании AUTO_INCREMENT необходимо соблюдать два правила. Во-первых, статус AUTO_INCREMENT может быть присвоен только одному столбцу в таблице. Во-вторых, столбец AUTO_INCREMENT должен быть проиндексирован (например, объявлен как первичный ключ).

Можно переопределить значение AUTO_INCREMENT столбца, просто указав значение при выполнении оператора INSERT. Пока указанное значение является уникальным, предоставленное значение будет использоваться в новой строке, а последующие приращения начнутся с вновь вставленного значения.

MySQL может быть запрошен для получения самого последнего значения приращения, используя функцию last_insert_id() следующим образом:

Создание таблиц БД в трех различных версиях

Теперь, когда мы понимаем SQL-запрос, давайте воспользуемся PHP для его выполнения.

Ниже описано создание таблиц в трех различных версиях: с использованием синтаксиса объектно-ориентированной процедуры MySQLi, процедурный MySQLi и процедуры PDO.

Источник