2012-04-25 54 views
14

Trong SQL của tôi, tôi đang sử dụng các mệnh đề WHERELIKE để thực hiện tìm kiếm. Tuy nhiên, tôi cần phải thực hiện tìm kiếm trên một giá trị kết hợp của hai cột - first_namelast_name:Kết hợp hai cột trong SQL cho mệnh đề WHERE

WHERE customers.first_name + customers.last_name LIKE '%John Smith%'

này không làm việc, nhưng tôi tự hỏi làm thế nào tôi có thể làm điều gì đó dọc theo những dòng?

Tôi đã cố gắng để làm tách các tìm kiếm bằng hai cột, như vậy:

WHERE customers.first_name LIKE '%John Smith%' OR customers.last_name LIKE '%John Smith%'

Nhưng rõ ràng rằng sẽ không làm việc, bởi vì các truy vấn tìm kiếm là giá trị kết hợp của hai cột này.

Trả lời

20

Sử dụng như sau:

WHERE CONCAT(customers.first_name, ' ', customers.last_name) LIKE '%John Smith%' 

Lưu ý rằng để cho tiện làm việc như dự định, tên đầu tiên và tên cuối cùng sẽ được cắt, tức là họ không được chứa khoảng trắng đầu hoặc cuối. Tốt hơn là cắt các chuỗi trong PHP, trước khi chèn vào cơ sở dữ liệu. Nhưng bạn cũng có thể kết hợp cắt tỉa vào truy vấn của bạn như thế này:

WHERE CONCAT(TRIM(customers.first_name), ' ', TRIM(customers.last_name)) LIKE '%John Smith%' 
2

tôi sẽ bắt đầu với một cái gì đó như thế này:

WHERE customers.first_name LIKE 'John%' AND customers.last_name LIKE 'Smith%' 

này sẽ trả về kết quả như: John Smith, Johnny Smithy, Johnson Smithison, vì dấu hiệu tỷ lệ phần trăm chỉ ở cuối điều khoản LIKE. Không giống như '%John%' có thể trả lại kết quả như: aaaaJohnaaaa, aaaSmithaaa.

+0

này nên hiệu quả hơn so với chạy một concat đầu tiên và sau đó so sánh. –

0

thử điều này:

SELECT * 
FROM customers 
WHERE concat(first_name,' ',last_name) like '%John Smith%'; 

tham khảo:
MySQL string functions

Các vấn đề liên quan