Chúng tôi có thể lưu trữ các Giá trị được Phân tách bằng Dấu phẩy trong mysql không?

Trong bài đăng trên blog này, chúng ta sẽ tìm hiểu cách nhóm các bộ giá trị thành một danh sách được phân tách bằng dấu phẩy, cho mỗi nhóm, bằng cách sử dụng hàm GROUP_CONCAT[] của MySQL. Tiếp tục đọc để biết thêm thông tin…

Khám phá các bài báo cao cấp, hướng dẫn chuyên sâu, video hướng dẫn, v.v. bằng cách tham gia tư cách thành viên “MySQL Learning Tier”. Bạn có quyền truy cập vào nội dung độc quyền chưa được xuất bản ở bất kỳ nơi nào khác với tư cách thành viên này. Với nội dung mới được bổ sung thường xuyên, hãy tiếp tục học MySQL ở mọi cấp độ

Học MySQL

Thúc đẩy

Nếu bạn thích nội dung được viết ở đây, bằng mọi cách, hãy chia sẻ blog này và [các] bài đăng yêu thích của bạn với những người khác, những người cũng có thể được hưởng lợi hoặc thích nội dung đó. Vì cà phê là thức uống yêu thích của tôi nên bạn thậm chí có thể mua cho tôi một ly nếu muốn.

Nhận các bài báo phù hợp với Refind được gửi mỗi ngày trong hộp thư đến của bạn. Refind là một phần trong thói quen đọc hàng ngày của tôi. Biến nó thành một phần của bạn bằng cách sử dụng liên kết giới thiệu của tôi. Bạn không phải trả thêm phí, tôi sẽ đủ điều kiện đăng ký trả phí với nhiều lượt đăng ký hơn từ liên kết của tôi. “Bản chất của web, mỗi sáng trong hộp thư đến của bạn. Đăng ký miễn phí“

Bản tin dành cho các nhà phát triển PHP và MySQL

Nhận bản sao sách điện tử của tôi, “10 mẹo MySQL cho mọi người”, hoàn toàn miễn phí khi bạn đăng ký nhận bản tin của OpenLampTech.

Tôi đang sử dụng bảng 'group_member' hư cấu này cho dữ liệu truy vấn và ví dụ. Có 4 nhóm riêng biệt. 100, 200, 300 và 400 tương ứng

Bảng dữ liệu nhóm_thành viên

Để đặt từng 'tên_thành_viên' theo thứ tự abc trong nhóm tương ứng của nó, chúng ta có thể sử dụng hàm GROUP_CONCAT[] và GROUP THEO cột 'group_num', chỉ định dấu phẩy làm giá trị SEPARATOR

Truy vấn hàm MySQL GROUP_CONCAT[]

Danh sách tên được phân tách bằng dấu phẩy sử dụng GROUP_CONCAT[]

Bạn có phải là thành viên của Medium không? . Không phải là một thành viên? . Sử dụng liên kết đăng ký của tôi [tôi sẽ nhận được hoa hồng mà bạn không phải trả thêm phí] và tham gia. Tôi thực sự thích đọc tất cả những nội dung tuyệt vời ở đó và tôi biết bạn cũng vậy

Tôi đã bao gồm một đoạn video ngắn về hoạt động của đoạn mã trên để bạn có thể thấy nó hoạt động như thế nào

Thể hiện sự ủng hộ và đánh giá cao của bạn đối với nội dung của tôi bằng cách ném bất kỳ tiền lẻ dự phòng nào của bạn vào Lọ đựng tiền boa của tôi

Lọ đựng tiền boa

Cảm ơn bạn đã đọc bài viết này. Hãy chia sẻ nó với người khác cũng sẽ thích nó



Josh Otwell có niềm đam mê phát triển với tư cách là Nhà phát triển PHP, chuyên gia SQL và blogger/nhà văn kỹ thuật

từ chối trách nhiệm. Phần lớn các ví dụ trong bài đăng này, được thực hiện trong môi trường máy trạm học tập/phát triển cá nhân và không nên được coi là chất lượng sản xuất hoặc sẵn sàng. Mục tiêu và nhu cầu cụ thể của bạn có thể thay đổi. Như mọi khi, chỉ vì bạn có thể làm điều gì đó không có nghĩa là bạn nên làm. Ý kiến ​​​​của tôi là của riêng tôi

Nhiều cách khác tôi có thể giúp

  • Bắt đầu một blog? . Hãy để cả hai tiết kiệm tiền cho các kế hoạch được cung cấp. 💸
  • Thu hút sự chú ý đến thương hiệu, sản phẩm hoặc dịch vụ của bạn với vị trí quảng cáo được phân loại giá cả phải chăng trong bản tin OpenLampTech
  • Cần lưu trữ cho ứng dụng web hoặc trang web WordPress tiếp theo của bạn? . Dịch vụ này không ai sánh kịp và họ cung cấp SSL miễn phí
  • 🔒5 sự thật tôi nhận ra với tư cách là một nhà phát triển tự học

Tiết lộ. Một số dịch vụ và liên kết sản phẩm của bài đăng trên blog này là các liên kết liên kết. Bạn không phải trả thêm phí, nếu bạn mua hàng bằng cách nhấp qua một trong số chúng, tôi sẽ nhận được hoa hồng

Đáng ngạc nhiên là MySQL không có chức năng dành riêng cho hoạt động này trái ngược với split_part trong PostgreSQL. May mắn thay, nó có hàm SUBSTRING_INDEX[] thực hiện hầu hết những gì chúng ta cần

Từ tài liệu chính thức

CREATE TABLE employees [
   id SERIAL,
   name VARCHAR[255],
   address TEXT,
   PRIMARY KEY [id]
];

INSERT INTO employees [id, name, address] VALUES 
[1, 'John Doe', '4225 Collins Street,Apt. A,Erie,PA,16510'],
[2, 'Bob Smith', '234 Main Street,,Erie,PA,16512'];
0

Trả về chuỗi con từ chuỗi str trước khi đếm số lần xuất hiện của dấu phân cách. Nếu số đếm là dương, mọi thứ ở bên trái của dấu phân cách cuối cùng [đếm từ bên trái] được trả về. Nếu số đếm là âm, mọi thứ ở bên phải của dấu phân cách cuối cùng [đếm từ bên phải] được trả về.

CREATE TABLE employees [
   id SERIAL,
   name VARCHAR[255],
   address TEXT,
   PRIMARY KEY [id]
];

INSERT INTO employees [id, name, address] VALUES 
[1, 'John Doe', '4225 Collins Street,Apt. A,Erie,PA,16510'],
[2, 'Bob Smith', '234 Main Street,,Erie,PA,16512'];
1 thực hiện khớp phân biệt chữ hoa chữ thường khi tìm kiếm dấu phân cách

mysql> SELECT SUBSTRING_INDEX['www.mysql.com', '.', 2];
        -> 'www.mysql'
mysql> SELECT SUBSTRING_INDEX['www.mysql.com', '.', -2];
        -> 'mysql.com'

Chức năng này an toàn cho nhiều byte

Các định nghĩa

CREATE TABLE employees [
   id SERIAL,
   name VARCHAR[255],
   address TEXT,
   PRIMARY KEY [id]
];

INSERT INTO employees [id, name, address] VALUES 
[1, 'John Doe', '4225 Collins Street,Apt. A,Erie,PA,16510'],
[2, 'Bob Smith', '234 Main Street,,Erie,PA,16512'];

Dung dịch

Giả sử chúng tôi muốn tìm tất cả nhân viên làm việc ở một tiểu bang nhất định [ví dụ:

CREATE TABLE employees [
   id SERIAL,
   name VARCHAR[255],
   address TEXT,
   PRIMARY KEY [id]
];

INSERT INTO employees [id, name, address] VALUES 
[1, 'John Doe', '4225 Collins Street,Apt. A,Erie,PA,16510'],
[2, 'Bob Smith', '234 Main Street,,Erie,PA,16512'];
2], đây là trường thứ tư trong cột chứa địa chỉ dưới dạng các giá trị được phân tách bằng dấu phẩy

Với chức năng

CREATE TABLE employees [
   id SERIAL,
   name VARCHAR[255],
   address TEXT,
   PRIMARY KEY [id]
];

INSERT INTO employees [id, name, address] VALUES 
[1, 'John Doe', '4225 Collins Street,Apt. A,Erie,PA,16510'],
[2, 'Bob Smith', '234 Main Street,,Erie,PA,16512'];
3, chúng tôi sẽ có thể trích xuất mọi thứ cho đến cột thứ tư chứa trạng thái

SELECT SUBSTRING_INDEX[address, ',', 4] FROM employees;
+-----------+------------------------------------+
| name      | SUBSTRING_INDEX[address, ',', 4]   |
+-----------+------------------------------------+
| John Doe  | 4225 Collins Street,Apt. A,Erie,PA | 
| Bob Smith | 234 Main Street,,Erie,PA           | 
+-----------+------------------------------------+

Bây giờ chúng ta biết rằng trạng thái sẽ luôn là trường cuối cùng trong giá trị kết quả. Vì hàm

CREATE TABLE employees [
   id SERIAL,
   name VARCHAR[255],
   address TEXT,
   PRIMARY KEY [id]
];

INSERT INTO employees [id, name, address] VALUES 
[1, 'John Doe', '4225 Collins Street,Apt. A,Erie,PA,16510'],
[2, 'Bob Smith', '234 Main Street,,Erie,PA,16512'];
1 cho phép sử dụng các giá trị âm để trích xuất các trường đếm từ bên phải nên chúng tôi sẽ sử dụng khả năng này để trích xuất trường ngoài cùng bên phải có chứa chữ viết tắt của tiểu bang

________số 8

Giải pháp cuối cùng để tất cả nhân viên làm việc ở một trạng thái nhất định được hiển thị bên dưới

SELECT name FROM employees WHERE SUBSTRING_INDEX[SUBSTRING_INDEX[address, ',', 4], ',', -1]='PA';
+-----------+
| name      |
+-----------+
| John Doe  | 
| Bob Smith | 
+-----------+

Hãy cẩn thận

Một điều cần lưu ý về

CREATE TABLE employees [
   id SERIAL,
   name VARCHAR[255],
   address TEXT,
   PRIMARY KEY [id]
];

INSERT INTO employees [id, name, address] VALUES 
[1, 'John Doe', '4225 Collins Street,Apt. A,Erie,PA,16510'],
[2, 'Bob Smith', '234 Main Street,,Erie,PA,16512'];
1 là hàm trả về toàn bộ chuỗi nếu trường được yêu cầu không tồn tại

Ví dụ:

CREATE TABLE employees [
   id SERIAL,
   name VARCHAR[255],
   address TEXT,
   PRIMARY KEY [id]
];

INSERT INTO employees [id, name, address] VALUES 
[1, 'John Doe', '4225 Collins Street,Apt. A,Erie,PA,16510'],
[2, 'Bob Smith', '234 Main Street,,Erie,PA,16512'];
6 trả về địa chỉ đầy đủ

CREATE TABLE employees [
   id SERIAL,
   name VARCHAR[255],
   address TEXT,
   PRIMARY KEY [id]
];

INSERT INTO employees [id, name, address] VALUES 
[1, 'John Doe', '4225 Collins Street,Apt. A,Erie,PA,16510'],
[2, 'Bob Smith', '234 Main Street,,Erie,PA,16512'];
2

Sau đó, cố gắng trích xuất trường thứ sáu bằng

CREATE TABLE employees [
   id SERIAL,
   name VARCHAR[255],
   address TEXT,
   PRIMARY KEY [id]
];

INSERT INTO employees [id, name, address] VALUES 
[1, 'John Doe', '4225 Collins Street,Apt. A,Erie,PA,16510'],
[2, 'Bob Smith', '234 Main Street,,Erie,PA,16512'];
7 sẽ cung cấp cho chúng tôi mã zip [trường thứ năm] sai

CREATE TABLE employees [
   id SERIAL,
   name VARCHAR[255],
   address TEXT,
   PRIMARY KEY [id]
];

INSERT INTO employees [id, name, address] VALUES 
[1, 'John Doe', '4225 Collins Street,Apt. A,Erie,PA,16510'],
[2, 'Bob Smith', '234 Main Street,,Erie,PA,16512'];
4

Một cách giải quyết khả thi cho vấn đề này là kiểm tra xem số lượng trường có lớn hơn hoặc bằng chỉ mục được yêu cầu hay không và sau đó nhập mã ở trên hoặc trả về chuỗi trống nếu chỉ mục trường không hợp lệ

CREATE TABLE employees [
   id SERIAL,
   name VARCHAR[255],
   address TEXT,
   PRIMARY KEY [id]
];

INSERT INTO employees [id, name, address] VALUES 
[1, 'John Doe', '4225 Collins Street,Apt. A,Erie,PA,16510'],
[2, 'Bob Smith', '234 Main Street,,Erie,PA,16512'];
5

sử dụng có thể

Trong hầu hết các trường hợp, tốt hơn là sử dụng một bảng tra cứu riêng biệt hoặc một cột cho từng trường thay vì lưu trữ dữ liệu dưới dạng các giá trị được phân tách bằng dấu phẩy để tra cứu sau này

Tuy nhiên, có thể có những trường hợp hiếm hoi mà thủ thuật trên có thể hữu ích. Ví dụ: gần đây tôi cần trả về một danh sách các giá trị từ hàm do người dùng xác định và cách duy nhất để làm điều đó là trả về một chuỗi chứa các giá trị được phân tách bằng dấu phẩy. Cuối cùng tôi đã sử dụng

CREATE TABLE employees [
   id SERIAL,
   name VARCHAR[255],
   address TEXT,
   PRIMARY KEY [id]
];

INSERT INTO employees [id, name, address] VALUES 
[1, 'John Doe', '4225 Collins Street,Apt. A,Erie,PA,16510'],
[2, 'Bob Smith', '234 Main Street,,Erie,PA,16512'];
1 để sắp xếp kết quả theo một trong các trường

Tìm kiếm trong cột chứa các giá trị được phân tách bằng dấu phẩy

MySQL có một hàm chuyên dụng FIND_IN_SET[] trả về chỉ mục trường nếu giá trị được tìm thấy trong một chuỗi chứa các giá trị được phân tách bằng dấu phẩy

Ví dụ: câu lệnh sau trả về chỉ mục dựa trên một giá trị

CREATE TABLE employees [
   id SERIAL,
   name VARCHAR[255],
   address TEXT,
   PRIMARY KEY [id]
];

INSERT INTO employees [id, name, address] VALUES 
[1, 'John Doe', '4225 Collins Street,Apt. A,Erie,PA,16510'],
[2, 'Bob Smith', '234 Main Street,,Erie,PA,16512'];
9 trong chuỗi
SELECT SUBSTRING_INDEX[address, ',', 4] FROM employees;
+-----------+------------------------------------+
| name      | SUBSTRING_INDEX[address, ',', 4]   |
+-----------+------------------------------------+
| John Doe  | 4225 Collins Street,Apt. A,Erie,PA | 
| Bob Smith | 234 Main Street,,Erie,PA           | 
+-----------+------------------------------------+
0

Chúng ta có thể lưu dấu phẩy không

Có thể thực hiện nhiều đầu vào cho cùng một tham số bằng các giá trị được phân tách bằng dấu phẩy trong tham số đầu vào của thủ tục được lưu trữ hoặc đầu vào cho hàm dạng bảng và được sử dụng với bảng trong một .

Cách sử dụng dấu phẩy

Trong MySQL, bạn có thể trả về kết quả truy vấn của mình dưới dạng danh sách được phân tách bằng dấu phẩy bằng cách sử dụng hàm GROUP_CONCAT[] . Hàm GROUP_CONCAT[] được xây dựng riêng cho mục đích nối kết quả của truy vấn được đặt thành một danh sách được phân tách bằng dấu phẩy hoặc dấu phân cách do bạn chọn.

Làm cách nào để tách các giá trị trong MySQL?

Trong MySQL, chúng tôi sử dụng SUBSTRING_INDEX[] để tách chuỗi . Nó thường bao gồm ba đối số tôi. e. , chuỗi, dấu phân cách và vị trí. Giá trị chuỗi sẽ được phân chia dựa trên vị trí.

Cách chèn dấu phẩy

Thử cái này. Sử dụng hàm implode[] của PHP. Nó sẽ chuyển đổi mảng thành chuỗi với dấu tách được xác định trong hàm. $NewsIndustryID_str =implode[',',$array['NewsIndustryID']]; . hoặc bất kỳ

Chủ Đề