2013-04-26 12 views
16

Buduję prosty wyszukiwania algorytmu i chcę złamać moje ciąg spacjami, i szukać mojego db na nim tak:wyszukiwania SQL wiele wartości w tym samym polu

$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 

Czy to możliwe?

góry dzięki

+0

Absolutnie - jest to możliwe i stosowane przez cały czas. Jeśli potrzebujesz programisty do pisania kodu, istnieje wiele stron internetowych. LinkedIn na przykład. Na tej stronie jednak zadaj pytania dotyczące konkretnego kodu, a nie prośby o napisanie kodu. Pokaż, co próbujesz i co znalazłeś ... itd. – Dave

+0

Dzięki, nie chciałem, aby mój kod został napisany dla mnie, tylko po to, aby wiedzieć, jak to zrobić. Mój kod nie przypomina tego, który napisałem powyżej. –

Odpowiedz

30

Tak, można użyć SQL IN operatorowi przeszukiwanie wielu wartościach bezwzględnych:

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

Jeśli chcesz użyć LIKE trzeba będzie użyć OR zamiast:

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

Korzystanie z AND (zgodnie z testem) wymaga, aby WSZYSTKIE warunki były prawdziwe, używając OR wymaga co najmniej jednego, aby było prawdziwe.

+0

Chociaż odpowiada to na twoje pytanie, prawdopodobnie będziesz chciał czegoś bardziej skomplikowanego niż którekolwiek z naszych rozwiązań, przeszukując 'OR', ale najpierw wyświetlając najbardziej trafne (najbardziej pasujące) wyniki. –

+0

Używam programu SQL Server i próbuję zrobić to samo. Jednak przekazuję ciąg wyszukiwania jako parametr do procedury przechowywanej. Jak podzielić parametr łańcucha wyszukiwania na spacje, a następnie dodać cały "LIKE"% Wartość1% LUB ..... "do klauzuli where, gdy nie znam wartości przed wyszukiwaniem przez użytkownika? –

+0

Jestem prawie pewien, że w najprostszych przypadkach "AND" jest poprawnym wyszukiwaniem. Jeśli użytkownik przeszkadzał wpisywać słowo, prawdopodobnie chce, aby pojawił się w wyniku 90% czasu. Pomyśl o wyszukiwarce Google: [+ "bob" + "hope"], co byłoby absolutnie bezużyteczne w wyszukiwaniu "OR". I przepraszam Google za całkowicie absurdalne wymagania dotyczące cytowań w pół-użytecznych wyszukiwaniach. Również 'AND' jest unikalną funkcjonalnością trudną do zdobycia, podczas gdy' OR' możesz po prostu uruchomić 2 wyszukiwania i sprawdzić, czy dostaniesz trafienie. – ebyrob

4

Spróbuj

Korzystanie 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++; 
} 

Korzystanie WHERE IN

$comma_separated = "('" . implode("','", $search) . "')"; // ('1','2','3') 
$sql = "Select name From myTable WHERE name IN ".$comma_separated ; 
Powiązane problemy