[MySQL|MariaDB|SQL] Wyszukiwanie danych
W dzisiejszym świecie internetu, poszukiwanie informacji stało się kluczowym elementem korzystania z niego. Dzięki zaawansowanym algorytmom wyszukiwarek, znalezienie porządanych informacji stało się szybkie i proste. Nic nie stoi na przeszkodzie, aby użytkownikom Twojej strony również umożliwić szybkie odnalezienie informacji poprzez stworzenie wyszukiwarki. W tym wpisie omówimy wyszukiwanie danych z bazy SQL np. MariaDB na podstawie podanych parametrów.
Na potrzeby tego wpisu załóżmy, że mamy tabelę "cars" z przykładowymi rekordami:
| id | car_name | engine_capacity | max_speed (km/h) | power |
|----|------------|-----------------|-------------------|-------|
| 1 | Toyota | 1.8 | 180.0 | 140.00|
| 2 | Ford | 2.0 | 200.0 | 180.00|
| 3 | Volkswagen | 1.6 | 190.0 | 110.00|
| 4 | BMW | 3.0 | 250.0 | 300.00|
| 5 | Audi | 2.5 | 240.0 | 250.00|
Jeśli chcemy wyszukać samochód po parametrze `max_speed`, tworzymy następujące zapytanie:
$max_speed_query = 200;
$sql = 'SELECT * FROM cars WHERE max_speed <= :max_speed';
Powyższe zapytanie wyszuka wszystkie auta, które mają max_speed=200. Jeśli takich rekordów będzie więcej, a jest potrzeba pobrania tylko jednego, dodajmy klauzulę LIMIT 1:
$sql = 'SELECT * FROM cars WHERE max_speed <= :max_speed' LIMIT 1;
Jeśli chcemy wyszukiwać po danym zakresie np. od - do danej prędkości, trzeba nieco zmodyfikować zapytanie:
$min_speed_query = 180;
$max_speed_query = 250;
$sql = 'SELECT * FROM cars WHERE max_speed >= :min_speed AND max_speed <= :max_speed';
Operator LIKE
Składnia operatora LIKE jest następująca:
SELECT * FROM tabela WHERE kolumna LIKE 'wartość';
Operatora LIKE używa się w połączeniu z wyrażeniem regularnym, które jest wzorcem do porównania z wartościami w kolumnie. Wyrażenie regularne może zawierać specjalne znaki, które pozwalają na bardziej zaawansowane wyszukiwanie.
Przykładowo, jeśli chcemy znaleźć wszystkie rekordy, których kolumna `car_name` zaczyna się od litery 'F', możemy użyć następującego zapytania:
SELECT * FROM cars WHERE car_name LIKE 'F%';
Znak '%' jest tzw. znakiem wieloznacznym (wildcard), który oznacza, że może wystąpić dowolny ciąg znaków. W tym przypadku oznacza to, że szukamy wszystkich rekordów, których kolumna `car_name` zaczyna się od litery 'F', niezależnie od tego, jakie są kolejne znaki.
Możemy również użyć znaku '_' (podkreślenie) jako znaku wieloznacznego, który oznacza, że dokładnie jeden znak powinien wystąpić na tym miejscu. Na przykład, jeśli chcemy znaleźć wszystkie rekordy, których kolumna `car_name` ma trzy znaki i zaczyna się od litery 'B', możemy użyć następującego zapytania:
SELECT * FROM cars WHERE car_name LIKE 'B__';
Operatora LIKE można również używać w połączeniu z innymi operatorami, takimi jak AND, OR, NOT, aby przeprowadzać bardziej zaawansowane wyszukiwania. Na przykład, jeśli chcemy znaleźć wszystkie rekordy, których kolumna `car_name` zaczyna się od litery 'F' i kończy na literę 'T', możemy użyć następującego zapytania:
SELECT * FROM cars WHERE car_name LIKE 'F% T';
Warto również zauważyć, że operator LIKE jest wrażliwy na wielkość liter. Oznacza to, że 'F' i 'f' będą traktowane jako różne znaki. Jeśli chcemy przeprowadzić wyszukiwanie, które jest niezależne od wielkości liter, możemy użyć funkcji UPPER() lub LOWER().
Na przykład, jeśli chcemy znaleźć wszystkie rekordy, których kolumna `car_name` zaczyna się od litery 'F', niezależnie od wielkości liter, możemy użyć następującego zapytania:
SELECT * FROM cars WHERE UPPER(car_name) LIKE 'F%';
Pomijanie duplikatów
Gdy w tabeli jest więcej takich samych rekordów i chcemy pominąć powtarzające się, należy użyć klauzuli DISTINCT:
SELECT DISTINCT car_name FROM cars';
Komentarze
Prześlij komentarz
Dzięki za komentarz!