Autor Zpráva
matak
Profil
Napadá někoho řešení jak vypočítat na -!-úrovni mysql-!- množství shodných podmínek zadaných pomocí OR?

např.

SELECT procentoshody, name, date, key FROM names WHERE key LIKE '%abc%' OR key LIKE '%def%' OR key LIKE '%ghi%';

a tedy i řadit výsledek podle procenta shody?

pokud key splňuje všechny podmínky má rank 3/3 takže 100%, pokud splňuje jen 2 podmínky má rank 2/3 apod.

díky za tipy
ninja
Profil
podminky dat do nekolika vnorenych IFu a seradit vysledky podle nich.
Joker
Profil
Nešlo by použít fulltextové vyhledávání (MATCH ... AGAINST), které rovnou řadí výsledky podle relevance?
matak
Profil
ty IF jsou zatím jediné řešení co mne napadá, vzhledem k tomu, že tam má být třeba 20 podmínek, moc se mi do těch IFu nechce, přece jen je to porovnání 20x IF na každém záznamu ve výsledku, tak nějak mám pocit, že to bude strašně pomalé

s tím fulltextem nemám šanci běží to na innoDB
ninja
Profil
matak: tak si navrhni jinou strukturu databaze. Ono to tobude obecne mnohem rychlejsi, kdyz misto nad 20 sloupci spustis prikaz LIKE jen nad jednim.
Kajman_
Profil *
select id, sum(rank) from
(select id, 1 rank FROM names WHERE `key` LIKE '%abc%'
union all
select id, 1 rank FROM names WHERE `key` LIKE '%def%'
union all
select id, 1 rank FROM names WHERE `key` LIKE '%ghi%'
) tmp
group by id
order by 2
matak
Profil
co znamená ? 1 rank ?

a to bude rychlejší než ten IF? nebo lepší?

přece jen pro dvacet porovnání je 20x poddotaz? a ještě jejich spojení?

moje řešení? je v něčem výhodnější to množství poddotazů?
SELECT (IF(key LIKE '%abc%', 1, 0)+IF(key LIKE '%abc%', 1, 0)+IF(key LIKE '%abc%', 1, 0)) rank FROM names WHERE key LIKE '%abc%' OR key LIKE '%def%' OR key LIKE '%ghi%';
Kajman_
Profil *
co znamená ? 1 rank ?
číslo 1 ve sloupci pojmenovaném rank

a to bude rychlejší než ten IF?
Zkuste si to změřit, nevím, co je rychlejší. Ale když máte or, tak si to db většinou stejně přepíše do unionu.
matak
Profil
zkusím jak je to s rychlostí,

ale sory asi sem natvrdlej ale

číslo 1 ve sloupci pojmenovaném rank?

??

sloupec pojmenovaný rank, ano chápu, ale co to číslo jedna nejaký kontext by nebyl?

ale jinak díky
Kajman_
Profil *
Když sečtete ty jedničky, máte počet vyhovujících podmínek. Jen tam má být v řazení desc. Šlo by použít i count(*), ale když někdy budete chtít nějaké podmínce dát větší váhu, tak tam můžete dát i jiné číslo než 1.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0