2011-08-31 38 views
29

Tôi đang tìm kiếm hai trường dưới dạng một từ cơ sở dữ liệu MySQL bằng cách sử dụng PHP.Làm cách nào để chọn hai cột là một?

ví dụ:

mysql_query(" 
    SELECT (first_name,last_name) As name 
    FROM people 
    WHERE (name LIKE '%" . $term . "%') 
"); 

Tôi nghĩ rằng đây là mã để sử dụng, nhưng vô ích. Nó đã được một thời gian kể từ khi tôi đã làm điều này và tôi không thể nhớ chính xác làm thế nào để đạt được kết quả mong muốn.

Trả lời

71

Bạn đang tìm kiếm hàm CONCAT.

mysql_query("SELECT CONCAT(first_name, last_name) As name FROM people WHERE (CONCAT(first_name, last_name) LIKE '%" . $term . "%')"); 

hoặc thậm chí ...

mysql_query("SELECT CONCAT(first_name, ' ', last_name) As name FROM people WHERE (CONCAT(first_name, ' ', last_name) LIKE '%" . $term . "%')"); 

Tôi không thể giải thích cho bạn những lý do đằng sau này (... nhưng có lẽ ai đó có thể để lại nhận xét?), Nhưng bạn không thể sử dụng name bí danh để tìm kiếm cả hai trường, bạn phải rõ ràng CONCAT một lần nữa.

+4

@Vache, Bạn không thể sử dụng một bí danh trong một mệnh đề where, vì mệnh đề where có thể thực hiện trước khi các bí danh đã được giải quyết. Nếu bạn muốn sử dụng bí danh, hãy đặt nó trong mệnh đề 'having'. Điều này có thể ảnh hưởng đến thời gian chạy của truy vấn tuy nhiên vì bạn đang buộc SQL phải giải quyết bí danh trước khi bộ lọc được áp dụng. – Johan

+0

Vì vậy, nó hoạt động nếu tôi không sử dụng 'WHERE (tên LIKE '%". $ Term. "'") ', Nhưng khi sử dụng nó giống như nó không hoạt động. – Bobby

+0

Nếu bạn muốn sử dụng bí danh trong một lọc, viết lại các truy vấn để: 'SELECT CONCAT (first_name, '', last_name) AS tên TỪ người HAVING tên LIKE 'Vache IAm'' – Johan

4

CONCAT

hoặc

CONCAT_WS

+1

Tôi sử dụng cả hai số này thường xuyên - concat trả về null nếu giá trị * bất kỳ * là null - điều này đôi khi có thể hữu ích 'concat (distance, 'km')' - nhưng thường xuyên hơn không concat_ws là tốt hơn, ví dụ: 'concat_ws ('', đầu tiên, giữa, cuối cùng)' – ErichBSchulz

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