Я хочу запрос, который сортирует мою таблицу по количеству появлений фразы в строке.
Примерно так:
select * from table where paragraph like '%im%' order by (count of success like statement execute in row)
_________________
| paragraph |
_________________
|hello im vahid|
| and im happy | with 2 (im)
_________________
в этом случае результат равен
_________________
| paragraph |
_________________
|hello im vahid |
|and im happy |
_________________
|im vahid glad |
|to meet u |
_________________
да Gerrat, это правильно, каждая запись, которая содержит буквы «im» (в столбце абзаца), упорядоченная по убыванию частоты, сколько раз каждый абзац содержит буквы «im»
$trimmed1= "my paragraph";
$pieces = explode(" ", trim($trimmed1));
$query = "SELECT * FROM agahi
WHERE active='2' AND ( ";
$countp = count($pieces);
for ($i = 0; $i < $countp-1; $i++) {
$query .=" CONCAT(sharh,' ',onvan,' ',kelid) LIKE '%".$pieces[$i]."%' OR ";
}
$query .=" CONCAT(sharh,' ',onvan,' ',kelid) LIKE '%".$pieces[$i]."%' " ;
$query .= ")
ORDER BY (";
for ($i = 0; $i < $countp-1; $i++) {
$query .=
"(
CASE WHEN CONCAT(sharh,' ',onvan,' ',kelid) LIKE '%".$piecesf[$i]."%'
THEN 1
ELSE 0
END
) + ";}
$query .= "(CASE WHEN CONCAT(sharh,' ',onvan,' ',kelid) LIKE '%".$piecesf[$i]."%'
THEN 1
ELSE 0
END )
) DESC ";
это мой код, но ORDER BY не работает верно
это сгенерированный код:
SELECT * FROM agahi WHERE active='2' AND ( CONCAT(sharh,' ',onvan,' ',kelid) LIKE '%cd%' OR CONCAT(sharh,' ',onvan,' ',kelid) LIKE '%dvd%' )
ORDER BY (
( CASE WHEN CONCAT(sharh,' ',onvan,' ',kelid) LIKE '%cd%' THEN 1 ELSE 0 END )
+ ( CASE WHEN CONCAT(sharh,' ',onvan,' ',kelid) LIKE '%dvd%' THEN 1 ELSE 0 END )
) DESC