Autor | Zpráva | ||
---|---|---|---|
Watchick Profil |
#1 · Zasláno: 8. 6. 2009, 06:34:59
tabulka uzivatele: id int(11) nick varchar(100) tabulka skupiny: id int(11) nazev varchar(100) Chtěl bych poradit/popřípadě odkaz na hotový kód, jak by nějaké efektivní SQL dotaz dokázal vyhodit co nejrelevantnější výsledky najednou z obou tabulek, a abych z těch momentálně poznal z jaké tabulky jsou (třeba něco jako typ=1 pro uzivatele a typ=2 pro skupiny) Moc děkuji všem Watchick |
||
cistax Profil |
#2 · Zasláno: 8. 6. 2009, 07:28:53
Mohl bys to prosím trochu více rozvést?
|
||
Watchick Profil |
#3 · Zasláno: 8. 6. 2009, 07:58:48 · Upravil/a: Watchick
Zatím jsem používal něšco takového:
SELECT id FROM uzivatele WHERE MATCH(`nick`) AGAINST ('".$dotaz."*' IN BOOLEAN MODE) ORDER BY 5 * MATCH(`nick`) AGAINST ('".$dotaz."*' IN BOOLEAN MODE) DESC ale nejsem si vubec jisty, jestli to funguje dobře, protože mi to občas vrací opravdu irelevatntní výsledky, a taky bych to potřeboval rozšířit ještě na jednu tabulku, aby to vyhazovalo výsledky z obou tabulek (ale zaroven aby se dalo poznat ze ktere tabulky ty data jsou)... Je tohle srozumitelnější? |
||
ninja Profil |
#4 · Zasláno: 8. 6. 2009, 10:13:30
Nastudovat UNION. Pro rozliseni si pridate jeden sloupec do vysledku a pres IF do nej budete hazet nejaky priznak, o kterou tabulku se jedna.
|
||
Mastodont Profil |
#5 · Zasláno: 8. 6. 2009, 10:22:48 · Upravil/a: Mastodont
Proč IF?
SELECT id, nick AS 'Jmeno', 'Uzivatel' As Typ FROM Uzivatele UNION SELECT id, nazev, 'Skupina' FROM Skupiny |
||
ninja Profil |
#6 · Zasláno: 8. 6. 2009, 11:46:30
Mastodont: mas pravdu, if je zbytecny.
|
||
Watchick Profil |
#7 · Zasláno: 8. 6. 2009, 15:56:33
Takže prostě takhle:
SELECT id, nick AS 'Jmeno', 'Uzivatel' As Typ FROM uzivatele WHERE MATCH(`nick`,`uzivatel`) AGAINST ('".$dotaz."*' IN BOOLEAN MODE) UNION SELECT id, nazev, 'Skupina' FROM Skupiny WHERE MATCH(`nazev`,`Skupina`) AGAINST ('".$dotaz."*' IN BOOLEAN MODE) ORDER BY 5 * MATCH(////Co ma byt tady? /////) AGAINST ('".$dotaz."*' IN BOOLEAN MODE) DESC"; Je tohle vyhledávání efektivní? Díky Watchick |
||
AM_ Profil |
#8 · Zasláno: 8. 6. 2009, 16:43:38
zkus říct slovy, podle čeho se to má řadit, ten zápis pět krát match cosi mi přijde divný.
|
||
Watchick Profil |
#9 · Zasláno: 8. 6. 2009, 17:06:42 · Upravil/a: Watchick
Najít nejrelevantnější výsledky... a řadit prostě podle toho...
například pokud budu hledat "agor" tak aby to seřadilo nejprve "magor" a teprve potom "bagr" Teda nevim jak je to s tim zacatecnim pismenem, asi to bere jen ty, ktere zacinaji na "agor" ne? |
||
Časová prodleva: 15 let
|
0