Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: sortowanie wedlug ilosci wysapien
Forum PHP.pl > Forum > Bazy danych
jaco
Mam taki problem - musze posortowac wyniki wedglug ilosci wystapien danego ciagu...

O ile dobrze pamietam bylo to juz prezentowane na forum lecz nie potrafilem sie tego doszukac - bede wdzieczny za link/odpowiedz.
kossa
select * from $table where $pole=$warunek order by $pole_z_bazy desc lub asc

to kwerenda wyciaga z tabeli dane gdzie wartosc pola $pole jest rowna $warunkowi i sortuje wedlug jakiegos pola innego np.: id a desc/asc sluzy do okreslenia sposobu sortowania - rosnaco lub malejaco

Kossa
jaco
Znowu bez przesady - to jest wzor typu echo 'Hello world!'; !!

Chce posortowac wedlug wyniki wedlug LICZBY wystapien danego ciagu w danej komorce.
Yarecki
Chyba chodzi Ci o ten link: http://dev.mysql.com/doc/mysql/en/Counting_rows.html
BzikOS
Nie, jemu zapewne chodzi o odpowiednik substr_count() w MySQL'u. Niestety ja nie znam sad.gif
FiDO
Nie ma takiej funkcji, ale mozna zrobic pare roszad i otrzymac odpowiedni wynik winksmiley.jpg
[sql:1:668894b48f]SELECT
text,
LENGTH(text) - LENGTH(REPLACE(text, '$search', SUBSTRING('$search',2))) substr_count
FROM tabela
ORDER BY substr_count DESC[/sql:1:668894b48f]
jaco
Nie wiem co napisalem ale dziala bardzo dobrze biggrin.gif

A myslalem, ze znam SQL... winksmiley.jpg
FiDO
Wolalbym jednak, zebys wiedzial, wiec postaram sie wytlumaczyc.

Po kolei:

1) REPLACE(text, '$search', SUBSTRING('$search',2)

zamieniamy kazde wystapienie szukanego ciagu na dowolny ciag, ktory jest o jeden znak krotszy od szukanego (dlaczego? ano dlatego, ze na kazdym znalezionym wyrazie skracamy caly ciag o jedna litere),
ja akurat wybralem substringa (ucinam od drugiego znaku do konca, czyli wynik jest o 1 krotszy niz orginalny wyraz), bo to mi pierwsze wpadlo na mysl i jest chyba jedna z szybszych alternatyw (mozna tez np. REPEAT('*', LENGTH($search)) ale to dluzsze i chyba mniej zrozumiale na pierwszy rzut oka - nie wiem jak z szybkoscia)

2) LENGTH(text) - LENGTH(REPLACE(text, '$search', SUBSTRING('$search',2)))

mierzymy ilosc liter w orginalnym tekscie, potem ilosc liter w tekscie z wyzej opisana podmiana
odejmujemy to od siebie i jest wynik smile.gif
Dlaczego? to juz pisalem wczesniej, kazde wystapienie szukanego ciagu "zbiera" jedna literke, wiec ilosc zabranych literek jest rowna ilosci wystapien danego ciagu, jasne? smile.gif
jaco
Jak najbardziej - to mi tylko uswiadomilo jak skromna jest moja wiedza na temat SQL (bo sam pomysl jest prosty i cwany swoja droga winksmiley.jpg)...

Cieszy mnie fakt, ze wszystko jest tak odrazu w wyniku - juz moge pozbyc sie obliczen na tablicach smile.gif
FiDO
Cytat
Jak najbardziej - to mi tylko uswiadomilo jak skromna jest moja wiedza na temat SQL (bo sam pomysl jest prosty i cwany swoja droga winksmiley.jpg)...

No wlasnie, sam pomysl jest trywialny smile.gif Zeby nie bylo to sam na niego nie wpadlem winksmiley.jpg Pomogl mi uboottd ktoryms swoim postem kiedys, jak ktos mial podobny problem.
DeyV
problem miał chybva speniu i jego wyszukiwarka.

a swoją drogą - nie moge pojąć 1 prostej rzeczy - dlaczego MySQL nie ma tak trywialnej funkcji jak zliczanie wystąpień 'cukru w cukrze' winksmiley.jpg
jaco
Cytat
nie moge pojąć 1 prostej rzeczy - dlaczego MySQL nie ma tak trywialnej funkcji jak zliczanie wystąpień 'cukru w cukrze' winksmiley.jpg


A dlatego, zebysmy mogli sobie pokombinowac tongue.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.