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
14.03.2004, 22:47:16
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]
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
15.03.2004, 19:41:45
A skad baza ma niby wiedziec, jaki jest skrot danego wyrazu

?
Chyba, ze chcesz przyjac, ze np. sa to zawsze pierwsze 3 litery wyrazu (raczej kiepskie zalozenie).
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
15.03.2004, 21:39:09
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
15.03.2004, 22:22:48
Poza tym LIKE używa kluczy, tylko gdy jest warunek taki jak ten: "LIKE 'tekst%' - czyli dowolność z prawej strony.
MaKARON
15.03.2004, 23:54:16
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ść
FiDO
16.03.2004, 00:21:29
Co z tego, jak autor topica ma LIKE '%wyrazenie%', wiec indeksy nie zostana uzyte.
spenalzo
16.03.2004, 00:27:29
FiDO: Ja tylko stwierdzałem fakt
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ść

Tak, ale porównaj działanie dla LIKE '%cos%' a LIKE 'cos%' - ale zaleta jest :-)
FiDO
16.03.2004, 00:31:58
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
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.