2013-04-26 37 views
16

Tôi đang xây dựng một thuật toán tìm kiếm đơn giản và tôi muốn phá vỡ chuỗi của tôi với không gian, và tìm kiếm db của tôi trên nó, như vậy:tìm kiếm SQL nhiều giá trị trong cùng một lĩnh vực

$search = "Sony TV with FullHD support"; 
$search = explode(' ', $search); 

SELECT name FROM Products WHERE name LIKE %$search[1]% AND name LIKE %$search[2]% LIMIT 6 

Is điều này có thể?

Cảm ơn trước

+0

Tuyệt đối - nó có thể và sử dụng tất cả các thời gian. Nếu bạn cần lập trình để viết mã cho bạn, có rất nhiều trang web cho điều đó. LinkedIn chẳng hạn. Tuy nhiên, đối với trang web này, vui lòng đặt câu hỏi về mã cụ thể thay vì yêu cầu mã được viết cho bạn. Hiển thị những gì bạn đã thử và những gì bạn đã tìm thấy ... v.v. – Dave

+0

Cảm ơn, tôi không muốn mã của tôi được viết cho tôi, chỉ để biết làm thế nào để làm điều đó. Mã của tôi trông không giống với mã tôi đã viết ở trên. –

Trả lời

30

Có, bạn có thể sử dụng SQL IN điều hành để tìm kiếm nhiều giá trị tuyệt đối:

SELECT name FROM products WHERE name IN ('Value1', 'Value2', ...); 

Nếu bạn muốn sử dụng LIKE bạn sẽ cần phải sử dụng OR thay vì:

SELECT name FROM products WHERE name LIKE '%Value1' OR name LIKE '%Value2'; 

Sử dụng AND (như bạn đã thử) yêu cầu TẤT CẢ các điều kiện là đúng, sử dụng OR yêu cầu ít nhất một là đúng.

+0

Trong khi điều này trả lời câu hỏi của bạn, bạn có thể muốn một cái gì đó phức tạp hơn một trong các giải pháp của chúng tôi, tìm kiếm 'OR' nhưng hiển thị kết quả phù hợp nhất (hầu hết các kết quả phù hợp) trước tiên. –

+0

Tôi đang sử dụng SQL Server và cố gắng làm điều tương tự. Tuy nhiên, tôi đang chuyển chuỗi tìm kiếm dưới dạng tham số cho một thủ tục được lưu trữ. Làm cách nào để chia nhỏ tham số chuỗi tìm kiếm dựa trên khoảng trắng và sau đó thêm tất cả "LIKE"% Value1% OR ..... "vào mệnh đề where khi tôi không biết giá trị trước khi người dùng tìm kiếm? –

+0

Tôi khá chắc chắn trong hầu hết các trường hợp đơn giản 'AND' là tìm kiếm chính xác. Nếu người dùng lo lắng gõ một từ, họ có thể muốn nó hiển thị trong kết quả 90% thời gian. Hãy suy nghĩ tìm kiếm của Google: [+ "bob" + "hy vọng"] sẽ hoàn toàn vô dụng như tìm kiếm 'OR'. Và tha thứ cho Google về các yêu cầu trích dẫn hoàn toàn vô lý trong các tìm kiếm bán hữu ích. Ngoài ra, 'AND' là chức năng duy nhất khó có được, trong khi' OR' bạn chỉ có thể chạy 2 tìm kiếm và xem liệu có một lần truy cập hay không. – ebyrob

4

Hãy thử điều này

Sử dụng UNION

$sql = ''; 
$count = 0; 
foreach($search as $text) 
{ 
    if($count > 0) 
    $sql = $sql."UNION Select name From myTable WHERE Name LIKE '%$text%'"; 
    else 
    $sql = $sql."Select name From myTable WHERE Name LIKE '%$text%'"; 

    $count++; 
} 

Sử dụng WHERE IN

$comma_separated = "('" . implode("','", $search) . "')"; // ('1','2','3') 
$sql = "Select name From myTable WHERE name IN ".$comma_separated ; 
Các vấn đề liên quan