Jak posortować dane w zapytanie gdzie użyty jest operator like

0

Witam mam następujące zapytanie

select name,text from tabela where name '%linux%' or text like '%linux%' or name like '%dos%' or text like '%dos%' order by name

i teraz to zapytanie jest dobre, le nie sortuje wyników według częstości występowania słów linux i dos, jak to zrobić żeby sortowało.

0

Musiałbyś zliczyć wystąpienia, aby po nich posortować. -> Googlaj "COUNT()"
ORDER BY sortuje alfabetycznie (domyślnie rosnąco) po kolumnie.
W kolumnie name może być np.

name

mint linux
ms dos
arch linux
Wyświetli:

name

arch linux
mint linux
ms dos

0

To by było dobre tylko teraz nie wiem jak to zapytanie zmodyfikować aby, wyszukiwało więcej niż jedną frazę np w polu desctiption ma się znajdować wartośc linux lub dos.

SELECT name, ROUND (   (LENGTH(name)- LENGTH( REPLACE ( name, "linux", "") ) ) / LENGTH("linux")        ),description,    ROUND (   (LENGTH(description)- LENGTH( REPLACE ( description, "linux", "") ) ) / LENGTH("linux")        ) AS count    FROM products order by count desc;

No i teraz jeszcze druga sprawa jak dodać żeby nie wybierał rekordów, które mają wartośc count == 0 próbowałem coś takiego, ale nie dało rezultatu

SELECT name, ROUND (   (LENGTH(name)- LENGTH( REPLACE ( name, "linux", "") ) ) / LENGTH("linux")        ),description,    ROUND (   (LENGTH(description)- LENGTH( REPLACE ( description, "linux", "") ) ) / LENGTH("linux")        ) AS count    FROM products  where count = '0' order by count desc;
0

już sobie poradziłem skonstruowałem takie zapytanie

select name, ROUND (   (LENGTH(name)- LENGTH( REPLACE ( name, '$array[$i]', '') ) ) / LENGTH('$array[$i]')        ) as pole1, description,    ROUND (   (LENGTH(description)- LENGTH( REPLACE ( description, '$array[$i]', '') ) ) / LENGTH('$array[$i]')        ) as pole2  from products having pole1 != '0' and pole2 != '0'

1 użytkowników online, w tym zalogowanych: 0, gości: 1