Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: wyszukiwanie
Forum PHP.pl > Forum > Bazy danych > MySQL
Ace
ok panowie, mam problem ;] Mecze sie z tym zapytaniem juz troche czasu.

po pierwsze, potrzebuje wyciagnac liste produktow z bazy danych z tabeli produkty, gdzie nazwa like "%$klucz%" lub opis like "%$klucz%", lecz tylko z wynikow gdzie kat_id = "$id"... wlasnie nie wiem dlaczego ale mi nie wychodzi to zapytanie ...

kolejna sprawa. Potrzebuje wykonac zapytanie np:

[sql:1:76a03410b9]
SELECT * FROM produkty WHERE nazwa like "%$klucz%"
[/sql:1:76a03410b9]
ale, dodatkowo, żeby znalazlo np: skrot slowa zawierajacego sie w zmiennej. np:
gdy $klucz = Bateria, to zeby wyswietlilo tez nazwe np:
Bat.mala

czy to jest wykonalne ?
FiDO
Cytat
po pierwsze, potrzebuje wyciagnac liste produktow z bazy danych z tabeli produkty, gdzie nazwa like "%$klucz%" lub opis like "%$klucz%", lecz tylko z wynikow gdzie kat_id = "$id"... wlasnie nie wiem dlaczego ale mi nie wychodzi to zapytanie ...

Proste zasady logiki...
[sql:1:8a1c275be3]
SELECT *
FROM produkty
WHERE kat_id = "$id" AND (nazwa LIKE "%$klucz%" OR opis LIKE "%$klucz%")
[/sql:1:8a1c275be3]
Ace
Dzięki Fido
ja probowalem cos w stylu
[sql:1:23a0a82436]
SELECT * FROM produkty
WHERE
nazwa LIKE "%$klucz%" OR
opis LIKE "%$klucz%" AND
kat_id="$kat_id"
[/sql:1:23a0a82436]
i tak raczej nie dostalem tego czego chcialem... A czy ktos moze mi pomoc z druga czescia mojego pytania ... ? chodzi mi o to ze wyszuka mi skrot klucza... np: wpisze Baterie, a znajdzie mi wpis Bat.Male...
FiDO
A skad baza ma niby wiedziec, jaki jest skrot danego wyrazu questionmark.gif?
Chyba, ze chcesz przyjac, ze np. sa to zawsze pierwsze 3 litery wyrazu (raczej kiepskie zalozenie).
Ace
powiedzmy zeby ograniczalo slowo kluczowe do 3 znakow.
ale urzylem czegos takiego, ze
[php:1:f34c5b4e51]<?php

$wartosc = $klucz[0].$klucz[1].$klucz[2]; // 3 pierwsze znaki ze zmiennej $klucz
$zapytanie = "SELECT * FROM produkty WHERE nazwa like '%$wartosc%'";

?>[/php:1:f34c5b4e51]

i w sumie jest ok...
FiDO
Swoja droga widze ze uzywasz LIKE'a do sprawdzania czy dany ciag wystepuje w polu. Wydaje mi sie, ze do tego lepsze (wydajniejsze) bedzie LOCATE/INSTR. Nie ma sensu zaprzegac do tak prostej czynnosci silnika z wzorcami.
[sql:1:f46b3cd2c3]WHERE LOCATE('$wartosc', pole) > 0 ...[/sql:1:f46b3cd2c3]

Z kolei pierwsze 3 znaki stringa mozna latwiej wyciagnac funkcja [manual:f46b3cd2c3]substr[/manual:f46b3cd2c3], ewentualnie zrobic to funkcja z MySQL'a (SUBSTRING).
spenalzo
Poza tym LIKE używa kluczy, tylko gdy jest warunek taki jak ten: "LIKE 'tekst%' - czyli dowolność z prawej strony.
MaKARON
Cytat
Poza tym LIKE używa kluczy, tylko gdy jest warunek taki jak ten: "LIKE 'tekst%' - czyli dowolność z prawej strony.
Ale to jest akurat zaleta... szybkość smile.gif
FiDO
Co z tego, jak autor topica ma LIKE '%wyrazenie%', wiec indeksy nie zostana uzyte.
spenalzo
FiDO: Ja tylko stwierdzałem fakt tongue.gif

Cytat
Cytat
Poza tym LIKE używa kluczy, tylko gdy jest warunek taki jak ten: "LIKE 'tekst%' - czyli dowolność z prawej strony.
Ale to jest akurat zaleta... szybkość smile.gif

Tak, ale porównaj działanie dla LIKE '%cos%' a LIKE 'cos%' - ale zaleta jest :-)
FiDO
Moja odpowiedz nie byla do Ciebie ;P

Pozatym LOCATE w przypadku tego uzycia ma ta sama funkcjonalnosc co LIKE '%tekst%' a indeksow uzywa, wiec chyba nie ma sie nad czym zastanawiac smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.