Перейти к содержимому

Как хранить массив в mysql

  • автор:

Как хранить массивы в MySQL?

У меня есть две таблицы в MySQL. Таблица. Пользователь имеет следующие столбцы:

Столбец fruits может содержать нуль или массив строк, таких как ( «яблоко», «оранжевый», «банан» ) или ( «клубника» ) и т.д. Вторая таблица — «Плоды стола» и имеет следующее три столбца:

Итак, как мне создать столбец fruits в первой таблице, чтобы он мог содержать массив строк, которые принимают значения из столбца fruit_name во второй таблице? Поскольку в MySQL нет типа данных массива, как мне это сделать?

6 ответов

Правильный способ сделать это — использовать несколько таблиц и JOIN их в ваших запросах.

Таблица person_fruit содержит одну строку для каждого плода, с которым связан человек и эффективно связывает таблицы person и fruits вместе, I.E.

Когда вы хотите получить человека и все свои плоды, вы можете сделать что-то вроде этого:

Причина, по которой в SQL нет массивов, заключается в том, что большинство людей действительно не нуждается в ней. Реляционные базы данных (SQL — это именно то, что) работают с использованием отношений, и большую часть времени лучше всего назначить одну строку таблицы каждому «бит информации». Например, где вы можете подумать «Мне нужен список вещей здесь», вместо этого создайте новую таблицу, привязывая строку в одной таблице к строке в другой таблице. [1] Таким образом, вы можете представлять отношения M: N. Другим преимуществом является то, что эти ссылки не будут мешать строке, содержащей связанный элемент. И база данных может индексировать эти строки. Массивы обычно не индексируются.

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

Читайте о нормализации базы данных, пожалуйста. Золотое правило: «[Каждый] не-ключ [атрибут] должен обеспечивать факт ключа, всего ключа и ничего, кроме ключа». Массив делает слишком много. Он имеет несколько фактов и хранит порядок (который не связан с самим отношением). И производительность плоха (см. Выше).

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

[1]: Это нормально, если в таблице ссылок есть только два столбца (первичные ключи из каждой таблицы)! Если сама связь имеет дополнительные атрибуты, они должны быть представлены в этой таблице в виде столбцов.

How to store array data type in MySQL

Although an array is one of the most common data types in the world of programming, MySQL actually doesn’t support saving an array type directly.

You can’t create a table column of array type in MySQL. The easiest way store array type data in MySQL is to use the JSON data type.

The JSON data type was first added in MySQL version 5.7.8, and you can use the type for storing JSON arrays and objects.

Let’s see an example of using JSON type in MySQL.

First, create a table called example with the following SQL statement:

The example table will have two columns: the id column and the docs column.

Now you can put an array inside the docs column with the following INSERT statement:

Now the column_one column will have an array stored inside it as follows:

And that’s the easiest way you can store an array type using MySQL.

You can put arrays with different lengths as the column values:

The table column would have arrays of different lengths as shown below:

You can query specific data by using the combination of WHERE and LIKE clause as follows:

And you can also UPDATE specific rows like this:

If you’d like to learn more about how MySQL handles JSON arrays, you can look into the MySQL JSON data type documentation.

Thanks for reading! ��

Take your skills to the next level ⚡️

I’m sending out an occasional email with the latest tutorials on programming, web development, and statistics. Drop your email in the box below and I’ll send new stuff straight into your inbox!

About

Hello! This website is dedicated to help you learn tech and data science skills with its step-by-step, beginner-friendly tutorials.
Learn statistics, JavaScript and other programming languages using clear examples written for people.

Store Arrays in MySQL

Store Arrays in MySQL

This tutorial shows you how to store or simulate arrays as a field in MySQL.

SQL doesn’t explicitly support arrays as a data type within its own language, but there are many workarounds to make it possible because it’s a relational database.

Relational databases like SQL work using relations and keys. Most times, we utilize those relationships to connect multiple values to a single row it’s related to.

Relations are a de-coupled version of arrays, and it works well with the nature and design of SQL (see normalization). That’s why there isn’t an array data type in SQL because more often than not, arrays aren’t needed because relations exist.

Arrays in a database can be dangerous if used or manipulated poorly. You can implement your database without them and have a very optimized database.

If you really want to or need to store arrays, here are some ways that you can do it.

Mock Arrays as Relations to Store Arrays in MySQL

If we’re to follow the nature and convention of SQL, then arrays should be treated as relations.

Let’s say we have a customer who has multiple orders in a restaurant.

Firstly we create customer and order tables.

The customer and their orders exhibit a one-to-many relationship; for this to be implemented, we would need an associative entity to connect the two tables to relate them to each other.

  • customer
  • order
  • customer_order

From these tables, we can relate John Doe ordering Scallops, Lobster, and Cheesecake. Meanwhile, Jane Doe ordered Steak and Cheesecake.

If we want to query for everything that John Doe has ordered, we would simply use a SELECT JOIN query as such:

Essentially, relations are SQL versions of arrays. So if you ever want to maintain good design, understand the concept of relations, and use them as much as possible.

Store Arrays Within a Different SQL Data Type

During the MySQL 5.7 update and upwards, the language now supports JSON as a data type. JSON provides SQL a convenient method to store complex data types like arrays, sets, maps, dictionaries, and many more.

The fastest way you can mock an array within SQL is to store it as a string.

Create tables customer and order .

Each time a customer makes an order, use GROUP_CONCAT() to store a new entry in the order field of the customer.

This method is essentially an array type being stored in a single column. However, this would mean that you aren’t following the convention of a relational database, which SQL is.

This is an effective way to store an array within SQL. Still, it’s considered a bad design to force an array into a relational database when you can easily store it in a new table and configure the relations and constraints.

Skilled in Python, Java, Spring Boot, AngularJS, and Agile Methodologies. Strong engineering professional with a passion for development and always seeking opportunities for personal and career growth. A Technical Writer writing about comprehensive how-to articles, environment set-ups, and technical walkthroughs. Specializes in writing Python, Java, Spring, and SQL articles.

Хранение массива в MySQL

Я пытаюсь выяснить, как лучше всего сохранить массив в поле MySQL, которым можно манипулировать из PHPMyAdmin.

Мы вводим сотрудников в таблицу в базе данных MySQL, используя PHPMyAdmin, и один из их столбцов — государственное лицензирование. Мы будем оценивать состояния, в которых они имеют лицензию, чтобы определить, имеют ли они право на получение конкретного отведения, которое назначается им в нашей CRM через POST. Мы проверим, соответствует ли их государственное лицензирование состоянию клиента наряду с некоторыми другими параметрами, чтобы определить, следует ли нам выполнять ведущее назначение для них (т. Е. Пороговые значения квоты, активный сеанс, их очередь? И т. Д.)

Таким образом, сотрудник № 1 лицензирован в CA, CO, OR и NJ, а сотрудник № 2 лицензирован в CA, FL, TX и VA. Как это лучше всего представлено в базе данных MySQL? Я не думаю, что мы хотим, чтобы это сериализовали, потому что кто-то будет вручную вводить государственные лицензии в БД. Должен ли я просто оставить его через запятую? В конечном итоге я создам небольшой интерфейс для добавления и удаления сотрудников, но PHPMyAdmin проще для нас, поскольку он уже создан.

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

Решение

Нет хорошего способа сохранить массив в одном поле.

Вам необходимо проверить ваши реляционные данные и внести соответствующие изменения в вашу схему. Смотрите пример ниже для ссылки на этот подход.

Если вы должны сохранить массив в одном поле, то функции serialize () и unserialize () сделают свое дело. Но вы не можете выполнять запросы по фактическому содержанию.

В качестве альтернативы функции сериализации есть также json_encode () и json_decode ().

Рассмотрим следующий массив

Чтобы сохранить его в базе данных, вам нужно создать такую ​​таблицу

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

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

Таблица пользователей:
userID | имя пользователя | USEREMAIL
123 | Нейт | nate@domain.com

Таблица государственного лицензирования:
userID | AZ | CA | CO | Нью-Джерси | ИЛИ | В.А.
123 | 0 | 1 | 0 | 1 | 1 | 0

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *