Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

คิวรี่ MySQL ดึงข้อมูลที่ตรงกับค่าจากอาร์เรย์ (ค่าคั่นจุลภาค)

ใช้ FIND_IN_SET() ค้นหาค่าในคอลัมน์ที่เก็บเป็นรายการคั่นจุลภาค

mysql> CREATE TABLE DemoTable1548 (
    -> StudentId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    -> StudentName VARCHAR(20),
    -> ArrayListOfMarks VARCHAR(100)
    -> );
Query OK, 0 rows affected (0.88 sec)
mysql> INSERT INTO DemoTable1548(StudentName, ArrayListOfMarks) VALUES('Chris', '56,78,90,87');
Query OK, 1 row affected (0.29 sec)
mysql> INSERT INTO DemoTable1548(StudentName, ArrayListOfMarks) VALUES('Bob', '90,78,65');
Query OK, 1 row affected (0.14 sec)
mysql> INSERT INTO DemoTable1548(StudentName, ArrayListOfMarks) VALUES('David', '91,34,56,78,87');
Query OK, 1 row affected (0.16 sec)
mysql> SELECT * FROM DemoTable1548;
+-----------+-------------+------------------+
| StudentId | StudentName | ArrayListOfMarks |
+-----------+-------------+------------------+
|         1 | Chris       | 56,78,90,87      |
|         2 | Bob         | 90,78,65         |
|         3 | David       | 91,34,56,78,87   |
+-----------+-------------+------------------+
3 rows in set (0.00 sec)

ค้นหานักเรียนที่มีคะแนน 87 ในรายการ:

mysql> SELECT * FROM DemoTable1548 WHERE FIND_IN_SET('87', ArrayListOfMarks);
+-----------+-------------+------------------+
| StudentId | StudentName | ArrayListOfMarks |
+-----------+-------------+------------------+
|         1 | Chris       | 56,78,90,87      |
|         3 | David       | 91,34,56,78,87   |
+-----------+-------------+------------------+
2 rows in set (0.00 sec)

ข้อจำกัด: ไม่ใช้ดัชนีได้ เหมาะกับข้อมูลเล็กหรือไม่ค่อยค้นหา ควรพิจารณา Normalize ตารางแยกเก็บคะแนน