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

ค้นหาข้อมูลหลายเงื่อนไขด้วย LIKE และ OR ใน MySQL

เมื่อต้องการค้นหาแถวที่ตรงกับ **หลายรูปแบบข้อความ** ในคอลัมน์เดียวกัน ให้ใช้ LIKE ร่วมกับ OR

รูปแบบคำสั่ง

SELECT * FROM yourTableName 
WHERE yourColumnName LIKE '%pattern1%' 
   OR yourColumnName LIKE '%pattern2%' 
   OR yourColumnName LIKE '%pattern3%' ...;

ตัวอย่างการใช้งาน

1. สร้างตารางและเพิ่มข้อมูล Hobby

mysql> CREATE TABLE LikeDemo (Hobby VARCHAR(200));
Query OK, 0 rows affected (1.71 sec)

mysql> INSERT INTO LikeDemo VALUES 
    -> ('Reading Book'),
    -> ('Playing Cricket Match'),
    -> ('Playing Hockey Match'),
    -> ('Reading Novel'),
    -> ('Swimming');

2. ดูข้อมูลทั้งหมด

mysql> SELECT * FROM LikeDemo;
+-----------------------+
| Hobby                 |
+-----------------------+
| Reading Book          |
| Playing Cricket Match |
| Playing Hockey Match  |
| Reading Novel         |
| Swimming              |
+-----------------------+
5 rows in set (0.00 sec)

3. ค้นหาที่มี "Cricket" หรือ "Reading"

mysql> SELECT * FROM LikeDemo 
    -> WHERE Hobby LIKE '%Cricket%' OR Hobby LIKE '%Reading%';
+-----------------------+
| Hobby                 |
+-----------------------+
| Reading Book          |
| Playing Cricket Match |
| Reading Novel         |
+-----------------------+
3 rows in set (0.00 sec)

วิธีอื่นที่มีประสิทธิภาพมากกว่า

REGEXP (Regular Expression)

SELECT * FROM LikeDemo 
WHERE Hobby REGEXP 'Cricket|Reading';

กระชับกว่า และอ่านง่ายกว่าเมื่อเงื่อนเยอะ

FULLTEXT SEARCH (สำหรับข้อความยาว/จำนวนมาก)

ALTER TABLE LikeDemo ADD FULLTEXT(Hobby);
SELECT * FROM LikeDemo 
WHERE MATCH(Hobby) AGAINST('+Cricket +Reading' IN BOOLEAN MODE);

เร็วมากสำหรับตารางใหญ่ แต่ต้อง MyISAM หรือ InnoDB 5.6+

เคล็ดลับการใช้ LIKE

  • %pattern% - ค้นหาทุกตำแหน่ง (ไม่ใช้ Index ได้ → Slow)
  • pattern% - ค้นหาเริ่มต้น (ใช้ Index ได้ → Fast)
  • %pattern - ค้นหาสิ้นสุด (ไม่ใช้ Index)
  • หลีกเลี่ยง Leading Wildcard (%...) ใน Production ตารางใหญ่

ตัวอย่าง: ค้นหาเฉพาะคำขึ้นต้น

-- หางานอดิเรกขึ้นต้นด้วย 'Reading'
SELECT * FROM LikeDemo WHERE Hobby LIKE 'Reading%';
+-----------------+
| Hobby           |
+-----------------+
| Reading Book    |
| Reading Novel   |
+-----------------+
2 rows in set (0.00 sec)

สรุปการเลือก

สถานการณ์แนะนำ
เงื่อนไขน้อย (< 5), ตารางเล็กLIKE ... OR LIKE ...
เงื่อนไขเยอะ, Pattern ซับซ้อนREGEXP
ตารางใหญ่ (>100k rows), ค้นหาข้อความเต็มFULLTEXT INDEX
ค้นหาคำนำหน้า (Prefix)LIKE 'prefix%' (ใช้ Index)